必须等待日志显示“database is ready to use!”才可连接,首次启动需5–8分钟;pdb名固定为freepdb1,密码通过-e oracle_pwd指定或查容器内/password文件。
能直接用官方镜像跑起来,但别指望“一键”就完事——密码、端口、日志等待时间这三关必须手动过。
docker pull container-registry.oracle.com/database/free:latest 失败怎么办
国内直连 container-registry.oracle.com 基本超时,这是常态,不是你网络问题。
- 换阿里云镜像源:
docker pull registry.cn-shanghai.aliyuncs.com/darkathena/oracle_23c_free:23.2.0.0(该镜像 ID 与官方一致,可放心用) - 不推荐用
latest标签:Oracle 官方镜像的latest并不稳定,有时指向测试分支;明确指定版本如23.2.0.0更可靠 - 拉取后务必核对镜像 ID:
docker images | grep oracle,确认输出中包含23.2.0.0或类似精确版本号
docker run 启动后连不上 1521 端口
容器进程起来了,docker ps 能看到,但 telnet 或 sqlplus 死活连不上——大概率是数据库还没真正就绪。
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 必须等日志输出
DATABASE IS READY TO USE!才算可用,这个过程在低配机器上可能长达 5–8 分钟 - 用
docker logs -f oracle23c实时盯住日志,别只看容器状态为 “Up X minutes” 就去连 - 端口映射别写错:
-p 1528:1521表示把宿主机 1528 映射到容器内 1521,客户端连接时得用localhost:1528,不是1521 - 防火墙/SELinux 可能拦截:Linux 上检查
sudo firewall-cmd --list-ports,macOS 检查“系统设置 > 隐私与安全性 > 防火墙”是否放行 Docker
sqlplus / as sysdba 报 ORA-01017:用户名或密码无效
Oracle 23c Free 镜像默认不支持操作系统认证(即 / as sysdba),这是和传统安装版的关键差异。
- 必须显式提供密码:
sqlplus sys/<code>ORACLE_PWD@localhost:1528/FREEPDB1 as sysdba -
ORACLE_PWD是你启动容器时用-e ORACLE_PWD=xxx指定的值;如果没指定,密码是随机生成的,只能进容器查:docker exec -it oracle23c cat /opt/oracle/product/23c/dbhomeFree/install/.password - 注意 PDB 名称:23c Free 默认创建的是
FREEPDB1,不是ORCLPDB1或ORCL,连错 PDB 会报ORA-12514 - system 用户密码和 sys 一样,但权限模型已收紧:23c 中
system不再默认拥有CREATE SESSION权限,首次登录建议优先用sys
真正卡住人的地方从来不是命令敲错,而是以为容器启动了数据库就 ready 了——它只是 Linux 进程起来了,Oracle 实例还在后台默默初始化。盯日志、记 PDB 名、核对密码来源,这三件事漏一个,后面所有操作都白搭。










