Oracle Database Free 官方镜像可通过 podman pull container-registry.oracle.com/database/free:latest 拉取,但需先验证网络连通性、配置登录与加速器,启动时须映射1521端口、挂载数据卷、设置shm-size及ulimit,并等待日志提示“Database ready to use”后方可连接。

确认镜像源可用且网络可达
直接拉取 container-registry.oracle.com/database/free:latest 前,先验证能否访问 Oracle 官方镜像仓库。国内环境常因 DNS 或防火墙导致超时或 i/o timeout 错误。
常见问题包括:
- 未配置 Podman 镜像加速器,尤其在非云环境(如本地 Rocky Linux 或 WSL2)
- Oracle 镜像仓库不走 Docker Hub 加速源,
registry-mirrors对它无效 - 企业内网拦截了
container-registry.oracle.com的 443 端口
建议操作:
- 运行
podman login container-registry.oracle.com(需 Oracle 账号,免费注册) - 若失败,先用
curl -v https://container-registry.oracle.com/v2/测试连通性 - 如确属网络限制,可考虑离线导入:在有网机器
podman pull后podman save成 tar,再podman load
启动容器时必须映射关键端口与卷
Oracle 23ai Free 容器默认监听 1521(TNS),但仅暴露该端口不够——缺少监听器配置和数据持久化会导致重启后数据库丢失、连接失败。
典型错误现象:
- 容器启动成功,但
sqlplus system/oracle@localhost:1521/FREEPDB1报ORA-12541: TNS:no listener - 第一次初始化成功,第二次
podman start后 PDB 不自动打开,SELECT STATUS FROM V$INSTANCE返回MOUNTED
正确启动命令应包含:
-
-p 1521:1521(必需) -
-v /path/to/oradata:/opt/oracle/oradata(强烈建议,否则每次重建容器都重装库) -
--shm-size=2g(Oracle 启动依赖足够共享内存,df -h /dev/shm小于 1G 会卡在初始化) -
--ulimit nofile=65536:65536 --ulimit nproc=65536:65536(避免 ORA-00845 错误)
首次启动后必须等待初始化完成
Oracle 23ai Free 镜像启动后不是立刻就绪的。它会在后台执行数据库创建、PDB 创建、密码设置等操作,耗时约 3–8 分钟(取决于 CPU 和磁盘 I/O)。期间 podman logs -f ora23ai 会持续输出日志,直到出现 Database ready to use. 或类似提示。
容易踩的坑:
- 看到容器状态为
Up 2 minutes就急着连,结果报ORA-12170: TNS:Connect timeout occurred - 用脚本自动化连接,但没加健康检查逻辑,导致下游服务启动失败
- 忽略日志末尾的默认密码提示(如
The Oracle Database FREE is ready. Default password: oracle)
推荐做法:
- 启动后执行
podman logs -f ora23ai | grep -i "ready\|password"等待明确就绪信号 - 写简单健康检查:循环执行
podman exec ora23ai sqlplus -s /nolog ,直到返回 <code>OPEN
连接时注意服务名与用户权限差异
Oracle 23ai Free 默认启用多租户架构,CDB 名为 FREE,PDB 名为 FREEPDB1。直接连 CDB 只能用 / as sysdba,普通应用应连 PDB。
常见连接失败原因:
- 用
system/oracle@localhost:1521/FREE连 CDB,但未显式切换容器:ALTER SESSION SET CONTAINER = FREEPDB1; - PDB 未 open:
ALTER PLUGGABLE DATABASE FREEPDB1 OPEN;(首次启动后通常已开,但重启容器后可能需手动) - 用户被设为只读(23ai 新特性):
SELECT username, read_only FROM dba_users WHERE username = 'SYSTEM';,若为YES则需ALTER USER system READ WRITE;
最简可用连接串(Linux/macOS):
sqlplus system/oracle@//localhost:1521/FREEPDB1
注意双斜杠 // 表示 EZCONNECT 模式,比 @host:port:sid 更可靠;服务名必须是 FREEPDB1,不是 FREE 或 ORCL。
Oracle 23ai 容器的初始化逻辑藏在 entrypoint 脚本里,不看日志就动手连,大概率撞上“数据库正在建表”的静默期。另外,read only 用户标记是 23ai 新增的安全层,它不改权限视图,只在会话级拦截 DML——排查连接后不能写的问题,别只查 GRANT,先查 DBA_USERS.READ_ONLY。


















