ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Docker 快速部署 Oracle 19c:镜像选型、参数配置与常见坑全解析

Docker 快速部署 Oracle 19c:镜像选型、参数配置与常见坑全解析 “docker 安装oracle19C”这句话最近在我这边的开发群里出现的频率非常高。原因也很好理解想用 Oracle 19c但不想在本地或者服务器上搞一套完整的 Oracle 环境——安装界面繁琐、系统参数要求多、配置错一步就是半天装完之后想卸载更是灾难注册表残留、服务残留光是清理就得折腾很久。而 Docker 能把整个 Oracle 环境封装成一个镜像一条命令起容器一条命令彻底删除既不污染宿主系统也能在 Windows、Linux 上保持一致的行为。这篇文章不绕弯子直接讲清楚我用 Docker 部署 Oracle 19c 的完整过程怎么选镜像、怎么起容器、参数怎么配、遇到哪些坑以及怎么排查。适合三类人看一是要快速搭一套 Oracle 19c 做开发的程序员二是负责给团队提供统一环境的技术负责人三是正在学 Oracle 的同学不想把电脑搞乱套。如果你已经准备好动手下面这些内容可以直接照着抄。1. 为什么用 Docker 跑 Oracle 19c环境隔离与快速交付1.1 常规安装 Oracle 19c 的三大痛点Oracle 19c 是 Oracle Database 12c 系列里的长期支持版本企业使用率相当高。但直接在物理机或云服务器上装 19c体验真的称不上顺畅。第一安装前的环境检查就很麻烦官方要求 Linux x86-64、特定内核、glibc 版本还要求配置内核参数、信号量、共享内存、文件描述符等一堆系统参数哪里不满足报错信息还很抽象。第二安装软件本身要下载好几个 GB 的安装包图形化安装向导里有上百个选项即便是有经验的 DBA全手动跑一遍也要一两个小时新手没个半天根本下不来。第三卸载和迁移都是灾难。Windows 上直接改注册表、删服务删不干净Linux 上也要逐项检查 rpm 包残留的文件系统还占着空间。我见过不少同事在 Windows 上装完 Oracle 之后想卸载重装另一版本结果 Oracle 相关的服务、注册表项怎么都清理不干净最后只能重装系统。这类问题在“如何卸载oracle19c注册表”这个搜索词的反复出现中就能看出来确实困扰了一大批人。而 Docker 的出现本质上就是来解决这类环境交付问题的。1.2 容器化方案的优势与适用场景用 Docker 装 Oracle 19c核心思路是把“数据库软件 依赖库 配置 必要的系统参数调整”全部固化到一个镜像里容器在创建时自动完成配置。优点很直接第一环境标准化团队每个人都跑同一个镜像不会再出现“我这边能跑你那边不行”的情况第二资源隔离容器占用的内存、CPU 可以单独限制不用的时候停掉即可第三可复制一条 docker run 命令就能再造一套完全一样的环境非常适合开发环境搭建、CI 流水线以及各种临时测试。当然也要泼一盆冷水容器里的 Oracle 不适合作为大规模生产库。原因在于存储 IO 经过 Docker 层会有一定损耗容器本身也不是为长时间高并发、高可用场景设计的。我一般建议生产环境还是用物理机或者云 RDS而开发、测试、学习、演示这些场景Docker 方案完全够用。对大多数团队而言用 Docker 搭一套 19c 环境从“没有”到“能连上”用时不到半小时这个效率是传统安装方式没法比的。1.3 部署前需要想清楚的问题动手之前建议先确认三个问题避免做到一半推翻重来。第一个宿主机还有多少可用空间。Oracle 19c 镜像体积通常在 8GB 到 12GB 之间容器起来之后数据文件、redo 日志等又会占几个 GB建议预留 30GB 以上。第二个内存够不够。Oracle 官方要求内存至少 2GB实际跑 19c 我建议容器分到 4GB 以上机器总物理内存 8GB 起步如果只有 4GB 内存跑起来会很卡甚至容器启动时直接报错。第三个数据库用在什么场景。如果只是临时测试建议直接拉第三方镜像几分钟就能用如果是给团队复现某个生产问题或者要长期使用建议走官方镜像构建流程这样更可控。这三个问题想清楚后面才不会被各种莫名其妙的报错反复折磨。2. 镜像选型官方镜像与第三方镜像怎么选2.1 官方镜像 oracle/database:19c 的构建思路Oracle 官方维护的 Docker 镜像在 GitHub 的 oracle/docker-images 仓库里镜像名是 oracle/database:19c。这里有一个关键信息必须说清楚官方镜像不能直接 docker pull 使用原因是 Oracle 的安装包属于受控分发文件需要你本人从 Oracle 官网下载 zip 包再放到对应版本的目录下然后构建本地镜像。流程大致是把 docker-images 仓库克隆到本地进入 OracleDatabase/SingleInstance/dockerfiles/19.3.0 目录把从官网下载的 LINUX.X64_193000_db_home.zip 放进去然后执行 ./buildDockerImage.sh -v 19.3.0 -e 开始构建。这个构建脚本会自动解压安装包、配置响应文件、初始化数据库、生成基线镜像耗时大概 15 到 30 分钟取决于机器性能。构建出来的镜像是完全从官方安装包做出来的干净、可追溯。团队交付场景下我会优先推荐这种方式因为最终跑出来的环境是基于你自己的构建记录出了问题也能回查。不过要提醒一句Oracle 19c 的安装包体积不小且下载前需要先完成 Oracle 官网的账号登录和许可确认这些都是正规渠道的正常操作别图省事去下载来路不明的安装包安全性没法保证。2.2 第三方预构建镜像懒人首选如果只是想快速看看效果或者用于开发测试直接用第三方已经 build 好的镜像会快得多。比较常见的有 truevoly/oracle-database:19c、nomius/oracle-database:19c 这些。直接执行 docker pull truevoly/oracle-database:19c 就行镜像大概 9GB 左右拉取完直接 docker run 即可它内部已经把 19c 企业版装好并初始化了一个容器数据库。注意第三方镜像支持的参数可能略有差异建议先用 docker inspect 看一下镜像环境变量或者直接以镜像仓库的 README 说明为准。这类镜像的优点是省去下载安装包和构建过程一条命令就能跑起来缺点也很明显镜像来源不是 Oracle 官方里面到底装了什么、有没有额外的非官方组件、有没有被改动过你很难完全放心而且体积通常也不小。所以使用第三方镜像的场合我建议只用在非生产、不涉密的环境里并且优先选择 GitHub Star 多、下载量高的仓库。生产环境或者给客户做交付还是老老实实走官方构建流程。2.3 我的选型建议与对比表我平时给团队搭开发环境默认还是走官方镜像的构建方式因为后续需要把数据库交付给前端、后端、测试同事大家用的镜像必须有唯一出处。我自己本地快速测试时偶尔直接拉第三方镜像。下面这张表是我实际对比后的结论可以参考维度官方构建第三方预构建获取难度需要下载安装包手动构建docker pull 即可安全性高安装包来自 Oracle中等来源不明需评估构建时间15~30 分钟取决于拉取速度体积约 8~10GB约 9~12GB适合场景生产复现、团队交付快速开发测试、学习顺便提醒一点无论用哪种镜像容器里的数据库都默认开启了企业版功能但许可问题需要你自己把握。企业内部测试一般没问题商用场景要和 Oracle 的授权政策对齐这里别踩线。3. 完整实操从零跑起一个 Oracle 19c 容器3.1 环境准备宿主机 Docker 还没装的话在 Linux 上装 Docker 很直接以 Ubuntu 为例sudo apt update sudo apt install -y docker.io sudo systemctl enable --now docker docker version在 Windows 上建议装 Docker Desktop它会帮你把 WSL2 或者 Hyper-V 的后端环境一并处理好。装好后打开 Docker Desktop进入 Settings - Resources把内存调整到 4GB 以上磁盘镜像大小调整到 30GB 以上。这一步不做后面容器很可能起不来。装好之后验证一下docker info如果输出里能看到 Server 信息且没有明显报错说明 Docker 守护进程正常工作。Windows 下如果遇到failed to connect to the docker api at npipe:////./pipe/dockerDesktopLinuxEngine...这类报错通常就是 Docker Desktop 没启动成功或者 WSL2 内核没更新去微软官方下载最新的 WSL2 内核更新包安装后重启 Docker Desktop 即可。还有一部分机器会提示virtualization support not detected这说明 BIOS 里的虚拟化开关没开需要重启进 BIOS 开启 Intel VT-x 或 AMD SVM。3.2 快速拉起第三方镜像容器以 truevoly/oracle-database:19c 为例执行docker pull truevoly/oracle-database:19c docker run -d \ -p 1521:1521 \ -p 5500:5500 \ --name oracle19c \ -e ORACLE_SIDORCLCDB \ -e ORACLE_PDBORCLPDB1 \ -e ORACLE_PWDOracle123! \ -v /data/oracle19c:/opt/oracle/oradata \ truevoly/oracle-database:19c参数逐条解释一下-d 表示后台运行-p 1521:1521 把容器内 Oracle 监听端口 1521 映射到宿主机-p 5500:5500 映射 EM Express 企业管理器端口--name 给容器起名-e 传入 Oracle 相关环境变量ORACLE_SID 是容器数据库的实例名ORACLE_PDB 是默认创建的插拔数据库名称ORACLE_PWD 是 sys 用户的密码-v 把数据目录挂载到宿主机 /data/oracle19c这样容器删了数据还在。密码我用了 Oracle123!只是示例你自己用的时候务必换成满足 Oracle 密码复杂度的强密码至少 8 位包含大小写字母和数字。3.3 等待数据库就绪并查看日志Oracle 19c 容器启动过程比较慢别看容器状态是 Up数据库可能还在初始化。正确做法是实时盯日志docker logs -f oracle19c当看到类似DATABASE IS READY TO USE!或者The database is ready to be used的字样时说明数据库已经可用。之后如果还看到Creating pluggable database ORCLPDB1的日志等几分钟直到 PDB 创建完成。实际经验是从 docker run 到完全就绪官方镜像大约需要 8 到 15 分钟第三方镜像也差不多期间 CPU 会比较高属正常现象不要以为卡死了。我第一次跑的时候不知道这个节奏看到容器 Up 了就急着去连结果提示ORA-01033在日志里翻了半天才发现是数据库还在初始化后来就养成了先看日志再连库的习惯。3.4 连接数据库容器内与外部两种方式容器内连接直接进入容器再调用 sqlplusdocker exec -it oracle19c bash -c sqlplus sys/Oracle123!//localhost:1521/ORCLPDB1 as sysdba注意 PDB 的服务名是 ORCLPDB1这是 12c 之后的默认设计CDB 是 ORCLCDBPDB 是 ORCLPDB1业务数据实际写在 PDB 里。外部连接要看你用什么 SQL 工具这里给一份 DBeaver 或 Navicat 的连接参数主机localhost远程机器就填宿主机 IP端口1521服务名/SID服务名填 ORCLPDB1不要用 SID 方式连接 ORCLCDB否则可能连不上用户名system密码你自己设置的 ORACLE_PWD如果外部连不上先排查监听是否正常进入容器执行docker exec -it oracle19c bash -c lsnrctl status再到宿主机关防火墙看 1521 端口有没有放行。这个排查顺序能解决大部分连不上的问题。3.5 官方镜像构建加启动加深理解如果走官方构建路线大致命令如下git clone https://github.com/oracle/docker-images.git cd docker-images/OracleDatabase/SingleInstance/dockerfiles # 把 LINUX.X64_193000_db_home.zip 拷贝到 19.3.0 目录 ./buildDockerImage.sh -v 19.3.0 -e docker run -d \ -p 1521:1521 \ -p 5500:5500 \ --name oracle19c \ -e ORACLE_SIDORCLCDB \ -e ORACLE_PDBORCLPDB1 \ -e ORACLE_PWDOracle123! \ oracle/database:19.3.0-ee官方镜像启动后容器里有个/opt/oracle/checkDBStatus.sh辅助脚本还有/home/oracle/setPassword.sh可以改密码比第三方镜像规范一些。数据文件默认在/opt/oracle/oradata挂载时直接映射这个目录即可。构建脚本本身会校验安装包完整性如果构建过程卡住多数是下载的 zip 包不完整重新下载覆盖即可。4. 参数与配置细节端口、内存、PDB、字符集4.1 核心环境变量的含义和默认值很多新手一上来就纠结 ORACLE_SID 该填什么。这里要讲清楚19c 默认是容器数据库架构官方镜像的默认 SID 是 ORCLCDBPDB 默认是 ORCLPDB1。如果你设定了 ORACLE_SIDORCL那么 CDB 实例名就叫 ORCLPDB 还是你设定的 ORACLE_PDB。对业务程序来说连接信息里更常写的其实是服务名而不是 SID——这两个概念经常被混淆。我实际遇到很多次开发同事直接把 tnsnames 里的 SERVICE_NAME 填成 SID连半天连不上。正确的做法是查看连接串里的 SERVICE_NAME 是否等于 PDB 名称也就是 ORCLPDB1。如果用的是 JDBC URL保持jdbc:oracle:thin://localhost:1521/ORCLPDB1这种格式后面统一用服务名不要混用。这个细节在容器化环境里尤其重要因为容器端口映射、PDB 名称、SID 名称混在一期出错时很难一眼看出来。4.2 端口映射、防火墙与远程访问默认情况下 Oracle 监听端口是 1521EM Express 是 5500两个端口都要映射到宿主机。容器创建之后如果要在局域网其他机器访问需要在宿主机防火墙放行这两个端口。Ubuntu 下可以这样sudo ufw allow 1521/tcp sudo ufw allow 5500/tcp还有一个经常被忽略的问题如果宿主机上已经有别的 Oracle 或者其他中间件占用了 1521映射会失败报错通常类似port is already allocated这时可以把容器端口映射到宿主机的其他端口比如-p 11521:1521外部连接时端口填 11521。这种写法在有多套数据库并行跑的时候特别实用。比如我本地同一时间跑着一套 11g 和一套 19c分别映射到 1521 和 15211互不干扰。云服务器的话还要记得在安全组里放开对应端口这一步漏了防火墙放行也没用。4.3 内存限制与 Docker 资源调度Oracle 对内存的检测很严格。容器创建时如果宿主机可用内存不足 2GB启动日志里大概率会看到ORA-27102: out of memory或者更早的Error: Oracle Home is not configured之类的报错实际上原因就是内存不够。Docker Desktop 用户先到 Settings - Resources 调整内存Linux 用户可以用 --memory 和 --cpus 限制容器资源docker run -d \ -p 1521:1521 \ -p 5500:5500 \ --name oracle19c \ --memory 4g \ --cpus 2 \ -e ORACLE_SIDORCLCDB \ -e ORACLE_PDBORCLPDB1 \ -e ORACLE_PWDOracle123! \ -v /data/oracle19c:/opt/oracle/oradata \ truevoly/oracle-database:19c不过我个人建议在开发环境先不要限制得太死Oracle 启动会尝试初始化共享内存限得太狠会导致启动失败。最稳妥的做法是给 4GB 以上内存预算先不要加 --memory 参数跑通初始化和建库完成后再看 docker stats 实际占用情况再决定要不要限制。别一上来就给自己挖坑。4.4 字符集默认 UTF-8 够用改库级字符集要慎重官方镜像默认字符集是 AL32UTF8对大多数现代应用来说是最优选择。如果你业务里需要 GBK 编码先考虑能否在应用侧解决实在要在数据库侧设置建议在创建 PDB 的 SQL 里指定字符集而不是对 CDB 做全局修改。实际操作中默认 AL32UTF8 下插入中文乱码的案例我见过不少原因绝大多数不是数据库字符集而是客户端连接字符集没配对。连接时可以在 JDBC URL 里加?useUnicodetruecharacterEncodingUTF-8或者在 SQL*Plus 里执行export NLS_LANGAMERICAN_AMERICA.AL32UTF8。先查数据库字符集SELECT value FROM nls_database_parameters WHERE parameter NLS_CHARACTERSET;再确认客户端连接环境两边字符集对齐绝大多数中文乱码都能解决。千万不要一遇到乱码就急着去改数据库字符集库级字符集改动影响面很大生产环境尤其要避免。5. 常见问题与排查技巧实录5.1 镜像拉取慢Docker Desktop 都启动不了“docker 安装oracle19C”最常卡住的点其实是 Docker 环境本身。拉镜像慢先配置国内镜像加速。在 Docker Desktop 的 Settings - Docker Engine 里加入 registry-mirrors 配置例如国内可用的容器镜像加速服务地址配置完 Apply Restart再重新 pull。这个操作在阿里云容器镜像服务控制台里也能拿到专属加速地址。换了加速源之后拉取这个 9GB 级别的大镜像会明显快很多。Docker Desktop 启动失败的问题常见两种一种是提示virtualization support not detected说明 BIOS 里的虚拟化没开需要重启进 BIOS 开启 Intel VT-x 或 AMD SVM另一种是 WSL2 相关报错比如Failed to connect to the docker api at npipe:////./pipe/dockerDesktopLinuxEngine大概率是 WSL2 内核版本太低更新内核后重启 Docker Desktop 就好。Linux 下如果遇到 “docker 服务启动失败”先看日志sudo systemctl status docker journalctl -u docker --no-pager | tail -50看到关键报错再对症处理最常见的是 iptables 规则冲突、网络接口没起来这类问题通常伴随“docker 网络不通”一起出现。新手最容易在这上面浪费时间我的建议是先把 Docker 官方安装文档走一遍再想其他优化。5.2 容器起来了但数据库连不上这类问题排在前三的有三个监听没起来、PDB 没有打开、网络端口不通。监听没起来的表现是报 ORA-12541: TNS:no listener或者 lsnrctl status 显示监听是 DOWN。进入容器手动启动监听docker exec -it oracle19c bash -c lsnrctl startPDB 没有打开的表现通常是 ORA-01033: ORACLE initialization or shutdown in progress或者连接 CDB 时报 ORA-01109。检查 PDB 状态docker exec -it oracle19c bash -c sqlplus / as sysdba然后在 SQL*Plus 里执行show pdbs; alter pluggable database ORCLPDB1 open;端口不通就用前面的排查顺序宿主机防火墙、云服务器安全组、容器端口映射。还有一个经常被忽略的问题数据库启动过程中当你看到日志里出现DONE: Setting up initial database时还不能急着连这只是软件配置阶段结束要等真正的DATABASE IS READY TO USE字样出现。我在帮同事排查时发现不少人其实是在等数据库就绪这个环节上栽了跟头。5.3 内存占用太高容器内 Oracle 进程刷屏Oracle 19c 光共享内存就可能吃掉好几个 GB所以开发机跑完一会 docker stats 里看到的 MEM USAGE 会非常吓人。这不是泄漏Oracle 的 SGA 和 PGA 默认分配就很大。想控制表现可以在容器内调整 SGA_TARGET 和 PGA_AGGREGATE_TARGET 两个参数比如都设置为 1GBALTER SYSTEM SET sga_target1G scopespfile; ALTER SYSTEM SET pga_aggregate_target1G scopespfile;改完重启容器docker restart oracle19c这一招在资源有限的笔记本上非常有效实测能明显降低内存占用。不过要注意参数改的是容器内实例配置如果重新 docker run 一个新的容器配置就丢了所以有长期使用的需求一定要挂数据卷并且把参数变更固化到初始化脚本里。5.4 SYSTEM 用户密码过期ORA-28001开发环境搭好半年后有同事突然连不上报 ORA-28001: the password has expired这是 Oracle 默认的 password life time 180 天导致的。解决方式很简单进去改一下密码并取消过期策略docker exec -it oracle19c bash -c sqlplus sys/Oracle123!//localhost:1521/ORCLPDB1 as sysdba然后执行ALTER USER system IDENTIFIED BY NewPass123!; ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;这一步建议在容器刚启动完就顺手做了省得半年后半夜被叫起来处理。我自己的习惯是每次新装一套 19c第一时间就把 DEFAULT profile 的密码过期策略改成 UNLIMITED开发环境没必要搞这种周期性失效。5.5 数据卷权限问题容器删了文件目录被锁死挂载数据卷时容器内的 oracle 用户 UID 是 54321宿主机的目录权限如果不是 54321 所有容器启动时可能报权限不足日志里会出现 Permission denied 之类的报错。解决方法是sudo chown -R 54321:54321 /data/oracle19c然后重启容器。另外如果误操作把 /data/oracle19c 里的文件清空别慌不要随便初始化先通过 docker logs 确认数据库是否还能恢复如果数据真的没了那也只能接受现实重新跑一个容器。这从侧面说明真正要紧的数据一定要有备份容器里的临时环境丢了不可怕生产数据丢了才是大事。5.6 卸载 Oracle 19c用 Docker 一条命令解决很多人知道用 Docker 装 Oracle 19c 方便但其实卸载才是容器方案最香的地方。本机直接装 Oracle卸载要改注册表、删服务、清理文件步骤极其繁琐这也是“如何卸载oracle19c注册表”这类问题反复出现的根本原因。而 Docker 方案里要清理环境就是两条命令docker rm -f oracle19c docker rmi truevoly/oracle-database:19c再把挂载的数据目录手动删掉即可。如果你在 Windows 上折腾过本机数据库注册表清理再用容器方案对比会非常明显。这也是我坚持在开发环境用 Docker 跑 Oracle 的核心原因之一。6. 进阶用 docker-compose 编排 Oracle 19c 与配套服务6.1 写一个 docker-compose.yml 管理 Oracle 19c手动敲 docker run 适合单机快速起一个容器但环境多了之后命令容易乱。更好的做法是写一个 docker-compose.yml把 Oracle 19c 的端口、环境变量、数据卷全部固化到文件里。一个参考配置如下version: 3.8 services: oracle19c: image: truevoly/oracle-database:19c container_name: oracle19c restart: always ports: - 1521:1521 - 5500:5500 environment: ORACLE_SID: ORCLCDB ORACLE_PDB: ORCLPDB1 ORACLE_PWD: Oracle123! volumes: - oracle19c-data:/opt/oracle/oradata volumes: oracle19c-data:然后一条命令启动docker compose up -d相比 docker rundocker compose 的好处是配置文件化。版本、端口、密码、卷都能写进 git团队成员拉下来直接起不会因为哪个人漏了参数导致环境不一致。日常管理用docker compose down停止并移除容器数据卷默认保留下次 up 的时候数据还在。注意不要用docker compose down -v除非你真的想连数据卷一起删掉。6.2 和 MySQL 8.0、Redis 主从等开发环境共用宿主机很多开发环境不是只有一个 Oracle 数据库而是同时需要 MySQL、Redis、GitLab、Dify 这些服务。Docker 的一个优势就是这些服务可以共存在一台机器上只要端口规划合理。比如我在同一台测试机上跑过 Oracle 19c、MySQL 8.0、Redis 主从还有 GitLab端口分别映射到 1521、3306、6379、10080每个容器独立管理互不干扰。给 MySQL 8.0 起容器也很简单docker run -d --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORDRoot123! \ mysql:8.0Redis 主从的编排用 docker-compose 写两个 service 就能实现。这种“一个宿主多套数据库”的思路在本地开发和团队共享环境里非常实用。如果你用的是 Docker Desktop还可以在 Settings 里统一调整所有容器的资源上限避免某个数据库把内存吃满导致其他服务崩溃。6.3 定期备份容器内 Oracle 数据容器环境跑久了数据备份工作不能省。最简单的做法是进入容器用 expdp 导出一份 dmp 文件然后复制到宿主机docker exec -it oracle19c bash -c sqlplus sys/Oracle123!//localhost:1521/ORCLPDB1 as sysdba在 SQL*Plus 里创建导出目录并授权然后执行导出脚本。导出文件默认放在容器内目录再通过 docker cp 拷到宿主机保存docker cp oracle19c:/opt/oracle/admin/ORCLCDB/dpdump/backup.dmp /data/oracle19c-backup/更粗暴但有效的办法是直接备份挂载卷目录但要注意必须是在数据库关闭或者做冷备份的状态下才能保证文件一致性。热备份可以考虑 rman写在脚本里定时执行。很多用 Docker 跑数据库的人最容易忽略的就是备份觉得“反正环境是临时的”直到误删了容器的数据卷才后悔。备份这件事几分钟能解决别省。我自己在这套方案上已经跑了不少时间。第一次给团队搭 19c 环境时因为没掌握好内存分配连续起了三次容器都失败后来才发现是宿主机只剩 3GB 可用内存Oracle 初始化时直接报错。把 Docker Desktop 内存调到 6GB 之后一切顺畅很多。后来又尝试在同一台机器上用类似方式部署了 MySQL 8.0、Redis 主从、GitLab发现只要把端口、卷、环境变量这三件事想清楚容器方案几乎可以覆盖开发环境的全部数据库需求。如果你现在正准备在本地或者测试服务器上搞一套 Oracle 19c建议直接按这篇文章的流程走一遍从拉镜像到能连上半小时以内搞定。到时候你会发现折腾了那么久的数据库环境问题其实早就该这么解决。
返回列表