必须先登录Oracle容器仓库才能拉取free:latest镜像,且启动时须指定-e ORACLE_PWD和--shm-size=2g,否则容器无法正常启动;数据库就绪标志为日志中出现“DATABASE IS READY TO USE!”,服务名为FREE和FREEDP。

拉取 container-registry.oracle.com/database/free:latest 镜像前必须登录
Oracle 官方镜像已从 Docker Hub 迁移至 container-registry.oracle.com,未登录直接 docker pull 会返回 unauthorized: authentication required 错误。必须先用 Oracle 账号执行:
docker login container-registry.oracle.com
账号需在 container-registry.oracle.com 注册并接受许可协议(免费开发者版需勾选 “I agree to the Oracle Free Terms and Conditions”)。登录后才能拉取 free:latest 镜像。
docker run 启动时必须指定 -e ORACLE_PWD 环境变量
Oracle 23c 免费版容器不接受默认密码,启动时若遗漏 -e ORACLE_PWD=your_password,容器会在初始化阶段卡住或报错退出,日志中可见 ORACLE_PWD must be set 提示。
推荐启动命令(含必要参数):
docker run -d \ --name ora23c \ -p 1521:1521 \ -p 5500:5500 \ -e ORACLE_PWD=MySecurePass123 \ -v /path/to/oradata:/opt/oracle/oradata \ --shm-size=2g \ container-registry.oracle.com/database/free:latest
-
--shm-size=2g是硬性要求,否则数据库实例无法启动(ORA-00845 错误) -
-v挂载/opt/oracle/oradata才能持久化数据;不挂载则容器重启后所有数据丢失 -
-p 5500:5500可选,但启用后可通过 https://localhost:5500/em 访问 Enterprise Manager Express
容器健康状态不是立刻就 OK 的,要等 DATABASE IS READY TO USE!
运行 docker ps 看到状态是 Up X seconds (health: starting) 不代表数据库已就绪。必须等日志中出现明确的就绪标记:
docker logs -f ora23c | grep "DATABASE IS READY TO USE!"
这个过程通常需要 3–8 分钟(取决于宿主机性能),期间可能看到大量 SQL> 和 PL/SQL 执行日志。强行提前连接会遇到 ORA-12514: TNS listener does not currently know of service requested。
就绪后可验证连接:
sqlplus sys/MySecurePass123@localhost:1521/FREE AS SYSDBA
连接字符串中的服务名不是 ORCL,而是 FREE 和 FREEDP
Oracle 23c 免费版默认使用单实例模式,预置两个服务名:
-
FREE:CDB 根容器服务名,用于连接SYS/SYSTEM等全局用户 -
FREEDP:默认 PDB(FREEPDB1)的服务名,应用连接应优先使用它
常见错误写法:sqlplus hr/password@localhost:1521/ORCL → 报错 ORA-12154。正确写法:
sqlplus hr/password@localhost:1521/FREEDP
如果要用 SQL*Plus 连进 PDB 做开发,记得先确认 PDB 已 open:
SELECT name, open_mode FROM v$pdbs WHERE name = 'FREEPDB1';
最易被忽略的是 --shm-size=2g 和 ORACLE_PWD —— 少一个,容器就起不来;等不到 DATABASE IS READY TO USE! 就连,连了也白连。











