docker 安装oracle19C,一篇文章就够了
选择docker镜像是为了简单,不需要一大堆依赖。
写这篇文章之前我是看了好多博主的文章,对于我来说每一篇都不是太爽,不能一直照着流程走通,也有可能我没有找到那篇一针见血的爽文。
所以我根据我的操作过程也集百家之长写了这篇,希望能帮到看到的人。
docker中安装oracle19C
第一步,先创建挂载文件
# 创建文件
mkdir –p /mydata/oracle/oradata
# 授权,不授权会导致后面安装失败
chmod 777 /mydata/oracle/oradata
第二步,下载镜像并创建容器,对于Oracle来说就是创建实例,具体参数的意思在下面有展示,遇到过的坑也顺便在下面说一下。
docker run -d \\
–name oracle19c \\
–ulimit nofile=262144:262144 \\
–ulimit nproc=16384:16384 \\
–ulimit memlock=-1:-1 \\
–ulimit stack=67108864 \\
–shm-size=1g \\
-p 1521:1521 \\
-p 5500:5500 \\
-e TZ=Asia/Shanghai \\
-e ORACLE_SID=orcl \\
-e ORACLE_PDB=orclpdb \\
-e ENABLE_ARCHIVELOG=false \\
-e ORACLE_PWD=oracle \\
-e ORACLE_BASE=/opt/oracle \\
-e ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 \\
-v /mydata/oracle/oradata/:/opt/oracle/oradata \\
registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee
查看安装日志
docker logs oracle19c –follow
日志中出现一下字样就算是安装成功,这个过程大概需要几分钟
54% complete
Creating Pluggable Databases
58% complete
77% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
/opt/oracle/cfgtoollogs/dbca/ORCL.
Database Information:
Global Database Name:ORCL
System Identifier(SID):ORCL
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCL/ORCL.log" for further details.
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Jan 22 16:05:43 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
在安装的时候我出现过安装容器报错的情况
library initialization failed – unable to allocate file descriptor table – out of memory/opt/oracle/createDB.sh: line 206: 51 Aborted (core dumped) dbca -silent -createDatabase -enableArch
ive "$ENABLE_ARCHIVELOG" -archiveLogDest "$ARCHIVELOG_DIR" ${DBCA_CRED_OPTIONS} -responseFile "$ORACLE_BASE"/dbca.rsp
cat: /opt/oracle/cfgtoollogs/dbca/ORCL/ORCL.log: No such file or directory
cat: /opt/oracle/cfgtoollogs/dbca/ORCL.log: No such file or directory
这个错误的核心原因不是物理内存不足(RAM),而是 Docker 容器的系统资源限制(ulimit)过低。
错误信息 library initialization failed – unable to allocate file descriptor table 表明 Oracle 进程(实际上是 JVM 或 DBCA 工具)试图打开文件句柄时,达到了容器默认允许的最大打开文件数限制(File Descriptors Limit)。
默认情况下,Docker 容器的 nofile(打开文件数)限制通常是 1024,而 Oracle 19c 安装和运行通常需要至少 65536。
如果你是使用 docker run 命令启动的,必须添加 –ulimit 参数来提高限制,同时建议增加共享内存大小(–shm-size),否则后面还会报 ORA-00845 错误。
请修改你的启动命令,加入以下参数:
参数解释:
- –ulimit nofile=262144:262144:解决你当前的 unable to allocate file descriptor table 错误。
- –ulimit nproc=16384:16384:增加最大进程数,Oracle 需要很多后台进程。
- –shm-size=1g:非常重要。Docker 默认共享内存只有 64MB,Oracle 启动实例通常需要更多(建议 1GB 或 2GB),否则 DBCA 虽然能运行,但创建实例时会报错。
其他参数的解释如下
创建表空间和用户
步骤 1:进入 Docker 容器并登录 SQLPlus
docker exec -it oracle19c /bin/bash
sqlplus / as sysdba
步骤 2:切换到 PDB 容器
Oracle 19c 的用户数据应该放在 PDB 中。执行以下命令切换:
— 查看当前有哪些 PDB
show pdbs;
— 切换到默认的 PDB (通常是 ORCLPDB1)
alter session set container = ORCLPDB;
— 确认是否切换成功(应该不再显示 CDB$ROOT)
show con_name;
步骤 3:创建表空间
切换到 PDB 后,就可以创建表空间了。为了避免路径问题,我们让 Oracle 自动管理文件位置(或者只指定文件名):
CREATE TABLESPACE test_tb DATAFILE 'test_tb.dbf' SIZE 1000M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
步骤 4:创建用户并授权
创建用户 test,密码设为 test(请自行修改),并指定默认表空间为刚才创建的 test_tb
— 创建用户
CREATE USER test IDENTIFIED BY test DEFAULT TABLESPACE test_tb TEMPORARY TABLESPACE temp;
— 授予连接和开发权限
GRANT CONNECT, RESOURCE TO test;
— 授予表空间的使用配额(如果不给配额,用户无法插入数据)
ALTER USER test QUOTA UNLIMITED ON test_tb;
步骤 5:验证连接
你可以尝试用新用户连接测试:
conn test/test@ORCLPDB


