Oracle 23c Free 在 Ubuntu 上推荐使用 Docker 部署,需指定强密码(如 MyPass123!)、端口映射(-p 1521:1521),挂载命名卷持久化数据,并手动开启 FREE PDB 才能正常使用。

直接用 Docker 是目前在 Ubuntu 上最快、最干净的 Oracle 23c 开发环境搭建方式。其他方式(如 RPM 安装、VM 导入)要么依赖特定系统(Oracle Linux)、要么资源开销大、要么容易触发 ORA-00442 单实例冲突限制。
docker run 启动容器时必须指定密码和端口映射
Oracle 官方镜像不接受空密码,且默认监听端口需显式暴露。漏掉任一参数会导致容器启动后无法连接或立即退出。
-
ORACLE_PWD环境变量必须设置,且长度至少 8 位、含大小写字母+数字+特殊字符(例如MyPass123!),否则初始化失败并打印ORA-01950: no privileges on tablespace 'USERS'类错误 -
-p 1521:1521是必须的,否则sqlplus无法连上;-p 5500:5500可选,仅用于访问 Oracle REST Data Services(ORDS)和 APEX 管理界面 - 首次运行会耗时 3–5 分钟(后台执行数据库创建),
docker logs -f <container_id></container_id>可观察进度,直到出现Database ready to use.
容器内 sqlplus 连接要加 @localhost:1521/FREE
很多人在容器里执行 sqlplus / as sysdba 失败,是因为 Oracle 23c Free 默认使用多租户架构,且 root container 名为 FREE,本地连接必须带完整连接字符串。
- 正确命令:
sqlplus system/MyPass123!@localhost:1521/FREE -
/ as sysdba在容器内不可用,会报ORA-01031: insufficient privileges—— 这不是权限问题,是 Free 版本禁用了操作系统认证登录模式 - 若要用
sqlplus连接远程主机(比如宿主机 Ubuntu 上的客户端),连接串应为system/MyPass123!@host.docker.internal:1521/FREE(Docker Desktop)或宿主机 IP(Linux Docker 引擎需确认iptables未拦截 1521)
容器停止后数据不丢失,但不能反复 docker run 同一镜像
Oracle 23c Free 镜像自带初始化逻辑,每次 docker run 都会尝试新建数据库。若已有数据卷存在,它会跳过初始化;但若你删了容器又没删卷,再 run 就可能卡在 “database already exists” 或触发 ORA-00442。
- 推荐做法:第一次启动时加
-v oracle23c-data:/opt/oracle/oradata挂载命名卷,后续重启都复用该卷 - 避免用
docker run ... --rm,否则每次容器退出数据就丢 - 想重置环境?先
docker volume rm oracle23c-data,再重新 run
真正容易被忽略的是:Oracle 23c Free 的 FREE PDB 默认不自动打开。哪怕容器跑起来了,sqlplus system/...@localhost:1521/FREE 连上后执行 SELECT status FROM v$pdbs; 会看到状态是 MOUNTED。得手动执行 ALTER PLUGGABLE DATABASE FREE OPEN; 才能建表、插数据——这个步骤文档里藏得深,但不执行就等于没真正可用。


















