podman 启动 oracle 23ai free 必须加 --cgroup-manager=systemd、--security-opt label=disable、--tmpfs /dev/shm:rw,size=2g,exec,否则因 cgroup 检查失败、selinux 冲突或 /dev/shm 无执行权限导致初始化卡住或报错。

Podman 可以替代 Docker 运行 Oracle 23ai Free 容器,但直接套用 docker run 命令会失败——因为 Podman 默认不启用 systemd 类服务、不自动挂载 /sys/fs/cgroup、且对 --init 和特权行为的处理逻辑不同。必须显式补全容器运行时依赖,否则卡在 “Initializing…” 或报 ORACLE_HOME not set。
Podman 启动 Oracle 23ai 必须加的参数有哪些
Oracle 官方 container-registry.oracle.com/database/free 镜像未做 Podman 适配,缺以下三项 Podman 特定配置,容器无法完成数据库初始化:
-
--cgroup-manager=systemd:否则oracle-database-preinstall脚本中基于 cgroup v2 的资源限制检查失败 -
--security-opt label=disable:绕过 SELinux 标签冲突(尤其 RHEL/CentOS/OL 系统) -
--tmpfs /dev/shm:rw,size=2g,exec:Oracle 初始化强制要求可执行的共享内存,Podman 默认挂载为noexec
完整启动命令示例(含必需项):
podman run -d \ --name oracle23ai \ --cgroup-manager=systemd \ --security-opt label=disable \ --tmpfs /dev/shm:rw,size=2g,exec \ -e ORACLE_PWD=MyPass123 \ -p 1521:1521 \ -v /opt/oradata:/opt/oracle/oradata \ -v /opt/oraconfig:/opt/oracle/scripts/setup \ container-registry.oracle.com/database/free
为什么用 podman pull 拉镜像经常超时或 401
不是网络配置问题,是 Oracle 官方镜像仓库 container-registry.oracle.com 对大陆 IP 实施了匿名拉取限流,podman pull 与 docker pull 在此场景下表现一致:
- 错误现象:
Get "https://container-registry.oracle.com/v2/": net/http: TLS handshake timeout或unauthorized: authentication required - 临时解法:设代理环境变量,如
export all_proxy=http://127.0.0.1:9910(需本地运行代理) - 稳解:用海外服务器拉取后
podman save -o oracle-free.tar container-registry.oracle.com/database/free,再podman load -i oracle-free.tar导入本地 - 切勿尝试
podman pull oracle/database-free——Docker Hub 上无官方镜像,全是第三方非受信构建
Podman 下如何确保数据不丢、PDB 可用
Oracle 23ai Free 容器内默认创建的可插拔数据库名为 FREEPDB1,但 Podman 容器重启后若未正确挂载卷,整个数据库会被重建:
- 必须挂载
/opt/oracle/oradata到宿主机路径,否则podman stop && podman start后数据全失 - 首次启动需等日志输出
Database ready to use(通常 5–8 分钟),此时才可连接;过早连会报ORA-12514: TNS listener does not currently know of service requested - 连接串应为
sqlplus system/MyPass123@localhost:1521/FREEPDB1,注意是FREEPDB1而非FREE(CDB 名) - 若需长期使用,建议额外挂载
/opt/oracle/scripts/setup卷,用于存放自定义初始化 SQL(如建用户、改MAX_STRING_SIZE)
最易被忽略的是 --tmpfs /dev/shm 的 exec 标志——Podman 默认禁用执行权限,而 Oracle 数据库初始化脚本需要在 /dev/shm 中写入并执行临时二进制,缺它就永远卡住。











