oracle 23ai容器在wsl2中启动失败,主因是wsl2内核版本非2、docker desktop未启用wsl2后端、/opt/oracle/oradata挂载路径误用windows文件系统(如/mnt/c/xxx);必须显式指定oracle_pwd、端口映射、本地挂载路径及tz时区参数,且镜像须从container-registry.oracle.com拉取并避免使用docker hub非官方镜像。

Oracle 23ai容器在WSL2里起不来?先看这三件事
绝大多数失败不是镜像或命令写错,而是WSL2底层环境没准备好。容器卡在 Initializing...、反复刷 ORACLE_HOME not set 或直接退出,基本都出在这三步:WSL2内核版本必须是2(不是1)、Docker Desktop已启用WSL2后端、/opt/oracle/oradata 挂载路径不能落在Windows文件系统(如/mnt/c/xxx)上。
docker run 必须带的参数一个都不能少
Oracle Free镜像不会自动初始化数据库,缺任意一个关键参数就会挂住。以下参数必须显式提供:
-
-e ORACLE_PWD=YourStrongPassword123:不设就初始化失败,密码需含大小写字母+数字,长度≥8 -
-p 1521:1521:端口映射不可省,否则宿主机连不上,PDB默认名是FREEPDB1 -
-v $PWD/oradata:/opt/oracle/oradata:挂载点必须是WSL2本地路径(如~/oracle-data),不能是/mnt/c/...,否则权限和性能双崩 - 可加
-e TZ=Asia/Shanghai避免时区错乱,尤其影响日志时间戳和定时任务
国内拉不到镜像?别硬试 container-registry.oracle.com
docker pull container-registry.oracle.com/database/free 在大陆直连大概率报 TLS handshake timeout 或 401 Unauthorized ——这不是你网络或配置问题,是Oracle官方未对大陆IP开放匿名拉取权限。
稳妥做法只有两个:
- 用海外服务器或GitHub Actions CI环境拉取镜像,再
docker save -o oracle23ai.tar container-registry.oracle.com/database/free:latest→ 传回本地 →docker load -i oracle23ai.tar - 临时走代理(仅限开发测试):
export all_proxy=http://127.0.0.1:9910(需本地运行Clash/V2Ray等),然后拉镜像
切记别试 docker pull oracle/database-free:Docker Hub上没有官方镜像,全是第三方非受信构建,风险极高。
容器启动后连不上?重点查这两处日志
容器看似running,但SQL*Plus或客户端连不上,90%是数据库还没真正ready。不要一启动就急着连,得等初始化完成:
- 执行
docker logs -f oracle23ai,盯住最后几行,直到出现Database ready to use才算完事(首次启动通常要5–8分钟) - 若卡在
Starting Oracle Listener...后不动,大概率是挂载目录权限不对:确保宿主机挂载路径(如~/oracle-data)由当前WSL2用户拥有,且无Windows符号链接混入 - 验证监听状态:
docker exec -it oracle23ai lsnrctl status,输出里要有FREEPDB1的服务项
挂载路径、镜像来源、初始化等待时间——这三个点最常被跳过,但恰恰决定你能不能在WSL2里真正用上Oracle 23ai,而不是只看到一个“running”假象。











