一聚教程网:一个值得你收藏的教程网站

热门教程

如何在Docker中安装Oracle19c数据库?

时间:2026-08-29 09:06:49 编辑:袖梨 来源:一聚教程网

必须选对CPU架构镜像、配足内存(≥4GB)、挂载可写路径至/opt/oracle/oradata,且需等待初始化完成(日志出现“Database ready to use”)才能连接;ARM64与x86_64镜像不兼容,Docker Desktop需调高内存限制,挂载路径权限须为777。

不能直接用最新镜像一键跑起来,必须选对镜像、配够资源、挂对路径,否则容器会卡在初始化阶段不动,或者启动后连不上。

拉取镜像前先确认 CPU 架构

ARM64(如 M1/M2/M3/M4 Mac)和 x86_64(Intel/AMD 服务器或虚拟机)镜像不兼容。运行 uname -m 查看架构:

  1. 输出 aarch64arm64 → 必须用 ARM64 镜像,例如:docker.cnb.cool/kangaroohy/open-source/images/oracle:19.19.0-ee-arm64
  2. 输出 x86_64 → 可用阿里云的通用镜像:registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c
  3. 拉取失败或启动报 exec format error,基本就是架构 mismatch,别硬等日志,立刻换镜像

容器启动必须满足最低内存要求

Oracle 19c 容器初始化时会检查 cgroup 内存限制。Docker Desktop 默认只给 2GB,docker run 启动后日志里反复出现:

cat: /sys/fs/cgroup/memory/memory.limit_in_bytes: No such file or directory

或卡在 Initializing Oracle 不动,说明内存不足。解决方式:

  1. Mac 用户:打开 Docker Desktop → Preferences → Resources → Memory → 调至 ≥ 4096 MiB(推荐 6144)
  2. Linux 服务器:确保宿主机空闲内存 ≥ 4GB,且未被其他容器抢占
  3. 不要依赖 --memory=4g 参数,第三方镜像通常不响应该参数,必须调高 Docker daemon 总限制

数据目录挂载必须可写且路径匹配

镜像默认把数据存在 /opt/oracle/oradata,但若挂载宿主机目录权限不对,初始化直接失败,日志停在 Creating and starting Oracle instance

正确做法:

  1. 先创建目录并赋全权限:mkdir -p /mydata/oracle/oradata && chmod 777 /mydata/oracle/oradata
  2. 挂载时路径必须完整对应:-v /mydata/oracle/oradata:/opt/oracle/oradata(不是 /oracle-data/oradata
  3. Mac 上避免挂载到 iCloud 同步目录或用户根目录下(如 ~/oracle-data),可能触发权限拦截
  4. 验证是否生效:进容器执行 ls -ld /opt/oracle/oradata,应显示 drwxrwxrwx

连接数据库前要等初始化完成

容器 docker run 返回 container ID 只代表进程启动了,不代表数据库就绪。常见误判:

  1. docker ps 显示 Up 状态 ≠ 数据库能连
  2. docker logs oracle 里看到 ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN 之后,还要继续等 15–25 分钟
  3. 真正完成的标志是日志末尾出现类似:Database ready to use. Enjoy! ;)Completed database initialization
  4. 此时再执行 sqlplus sys/ORACLE_PWD@localhost:1521/ORCLCDB as sysdba 才大概率成功

最常被忽略的一点:Oracle 19c 镜像初始化是单线程阻塞式操作,期间 CPU 占用低、日志几乎静默,容易误以为卡死而反复重启容器——其实它就在那儿默默建库,别动,等满 30 分钟再查日志。

热门栏目