如何在Ubuntu22.04上通过Docker部署Oracle19c?

梦瑶大大_6498

梦瑶大大_6498

2026-11-01

919人浏览

原创

Ubuntu 22.04 上用 Docker 部署 Oracle 19c 是当前最可行、最省事的路径,必须使用预编译第三方镜像(如 registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c),因其已解决 glibc/GCC/内核头文件 ABI 不兼容问题,而裸装或自建 Dockerfile 均会因链接 libasmclntsh19.ohso 失败卡死。

如何在ubuntu22.04上通过docker部署oracle19c?

直接说结论:Ubuntu 22.04 上用 Docker 部署 Oracle 19c 是当前最可行、最省事的路径,但必须用预编译镜像(如 registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c),不能自己 build,也不能指望官方 oracle/database:19c 镜像——它不公开提供,且需要 Oracle 账户登录。

为什么不能裸装,也别自己 build 镜像

Oracle 19c 编译依赖 glibc 2.28、GCC 8–10 和旧版内核头文件,而 Ubuntu 22.04 自带 glibc 2.35 + GCC 11+,runInstaller 在链接 libasmclntsh19.ohso 时必然失败,报错类似 FATAL] Error in invoking target 'libasmclntsh19.ohso'。这不是缺包或权限问题,是 ABI 层级不兼容。自己写 Dockerfile 基于 ubuntu:22.04 安装 JDK、解压包、运行 runInstaller,结果一样卡死。

可选方案只剩两个:

  • 用已预编译、验证可启动的第三方镜像(推荐)
  • 换系统(如 Oracle Linux 8)再裸装——但这就脱离了“在 Ubuntu 22.04 上”的前提

拉取与运行 zhuyijun/oracle:19c 的关键参数

这个镜像已打包好所有依赖、补丁和初始化逻辑,但启动命令里几个参数漏掉一个,容器就会静默退出或监听失败:

  • -v /mydata/oracle/oradata:/opt/oracle/oradata 必须挂载,且宿主机目录权限设为 chmod 777 /mydata/oracle/oradata(Oracle 容器内以 UID 54321 的 oracle 用户写入,UID 映射不可控)
  • -e ORACLE_PWD=orcl 密码不能含 @、$、# 等 shell 特殊字符,否则 listener.ora 解析失败,docker logs -f oracle19c 会卡在 Starting Oracle Net Listener...
  • -p 1521:1521 和 -p 5500:5500 必须显式映射,后者是 EM Express 管理界面端口;若只映射 1521,远程客户端连得上但查不到 PDB 状态

完整命令示例:

docker run -d \
  --name oracle19c \
  --restart=unless-stopped \
  -p 1521:1521 \
  -p 5500:5500 \
  -e ORACLE_SID=ORCLCDB \
  -e ORACLE_PDB=ORCLPDB \
  -e ORACLE_PWD=orcl \
  -e ORACLE_CHARACTERSET=AL32UTF8 \
  -v /mydata/oracle/oradata:/opt/oracle/oradata \
  registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c

如何确认数据库真正就绪,而不是“假启动”

容器 STATUS 显示 Up 2 minutes 不代表可用。Oracle 初始化是异步的,需盯日志输出确切信号:

Docker Compose Optimizer
Docker Compose Optimizer

优化 Docker Compose 配置,适用于开发和生产环境——审计服务、网络、卷、健康检查和资源管理。

下载
  • 执行 docker logs -ft oracle19c
  • 等出现连续 ######################### 分隔线,再看到 ORACLE DATABASE IS READY TO USE! 才算成功(该提示由镜像内 setup.sh 输出,非 Oracle 自带)
  • 若日志停在 Starting Oracle Net Listener... 或反复报 TNS-12541: No listener,大概率是 ORACLE_PWD 含非法字符,删容器重试

验证连接:

sqlplus sys/orcl@localhost:1521/ORCLCDB as sysdba

进库后执行 show pdbs,应能看到 ORCLPDB 处于 READ WRITE 状态。

远程访问不通?先查这三处

本地 sqlplus 能连 ≠ 远程能连。常见断点:

  • 宿主机防火墙没放行 1521 端口:sudo ufw allow 1521
  • Docker 默认绑定到 127.0.0.1:1521,远程连不上;加 --network host 或确保 -p 1521:1521 未被其他服务占用
  • Oracle 监听器注册的是容器内网 IP(如 172.17.0.2),远程客户端解析不到;解决方法是在 tnsnames.ora 中用 (HOST = your-host-ip) 替代 (HOST = localhost),或改用 EZConnect 格式:sqlplus user/pass@host-ip:1521/ORCLPDB

真正容易被忽略的是:镜像内监听器默认只注册 CDB,PDB 需手动 ALTER PLUGGABLE DATABASE ORCLPDB SAVE STATE 才能在重启后自动打开——否则每次 docker restart oracle19c 后,PDB 是 MOUNTED 状态,远程连 PDB 就报 ORA-12514。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

765

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

6199

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

7297

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2873

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

319

16

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

2026.03.31

471

14

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

2026.05.11

440

26

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

2026.05.15

325

24

Hyperf 项目部署运维与性能调优手册
Hyperf 项目部署运维与性能调优手册

聚焦 Hyperf 在生产环境的落地,包含 Docker 高效打包、Swoole 配置优化、常见的内存溢出(OOM)问题排查方法以及热更新方案。

2026.05.19

505

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程