必须用阿里云镜像源拉取registry.cn-shanghai.aliyuncs.com/darkathena/oracle_23c_free:23.2.0.0并核对版本号;启动后需盯日志直至出现“database is ready to use!”,且pdb名固定为freepdb1、密码须通过-e oracle_pwd指定或查容器内.password文件。

docker pull 失败:container-registry.oracle.com 连不上
国内直连 Oracle 官方镜像仓库基本必超时,这不是你网络配置问题,是常态。别反复重试 docker pull container-registry.oracle.com/database/free:latest。
换阿里云镜像源,用这个命令:
docker pull registry.cn-shanghai.aliyuncs.com/darkathena/oracle_23c_free:23.2.0.0
拉完后必须核对镜像 ID:
- 运行
docker images | grep oracle - 确认输出里有
23.2.0.0(不是latest) -
latest标签不稳定,有时指向非 GA 分支,明确版本号才可靠
容器启动了但 1521 连不上
容器状态显示 Up 2 minutes ≠ 数据库就绪。Oracle 实例初始化要时间,低配机器上可能达 5–8 分钟。
盯日志才是关键:
- 执行
docker logs -f oracle23c - 只等出现
DATABASE IS READY TO USE!这行输出 - 在此之前所有连接尝试都会失败(
ORA-12514、连接超时等)
另外检查端口映射是否写反:
-
-p 1521:1521表示宿主机 1521 → 容器内 1521 - 如果写了
-p 1528:1521,客户端就得连localhost:1528,不是:1521 - Linux 上查防火墙:
sudo firewall-cmd --list-ports;macOS 检查系统设置里的防火墙是否放行 Docker
sqlplus / as sysdba 报 ORA-01017
Oracle 23c Free 镜像默认禁用操作系统认证,/ as sysdba 路径走不通——这不是密码错,是功能被关了。
正确做法:
- 启动时用
-e ORACLE_PWD=your_password显式指定密码 - 如果没指定,密码是随机生成的,进容器查:
docker exec -it oracle23c cat /opt/oracle/product/23c/dbhomeFree/install/.password - PDB 名固定为
FREEPDB1,不是ORCLPDB1或ORCL;连错 PDB 会直接报ORA-12514 -
system用户密码和sys一样,但权限收紧,首次登录建议用sys
磁盘空间和首次启动耗时被低估
镜像本身约 2.1GB,解压+初始化后实际占用近 9GB 空间。别在只剩 5GB 的根分区硬跑。
真正卡住人的永远不是命令敲错,而是误判“ready”时机:
- 容器进程起来了 ≠ Listener 启动了 ≠ 实例 mount 了 ≠ PDB open 了
- 盯日志、记死
FREEPDB1、核对密码来源——三件事漏一个,后面全白搭 - 尤其在 CI/CD 或脚本自动化场景,必须加日志轮询逻辑,不能靠 sleep 固定时长











