Docker部署Oracle数据库如何将容器内默认1521端口修改为1531
你遇到的ORA-12514报错是因为修改端口后,数据库实例没有注册到新端口的监听器上,只修改脚本和Dockerfile不够,需要同步修改数据库内核参数,完整操作步骤如下:
操作步骤
1. 修改镜像构建配置
- 编辑19.3.0版本对应的Dockerfile,将
EXPOSE 1521修改为EXPOSE 1531 - 编辑
createDB.sh脚本,将所有硬编码的1521端口替换为1531 - 编辑监听器和TNS配置模板:找到镜像内
$ORACLE_HOME/network/admin下的listener.ora.template、tnsnames.ora.template,将其中1521端口全部替换为1531
2. 数据库参数调整(首次初始化后执行)
如果是全新部署,实例创建完成后进入容器执行以下操作:
- 以本地sysdba身份登录数据库,不需要走监听:
sqlplus / as sysdba - 修改实例监听注册配置,指向新端口:
ALTER SYSTEM SET LOCAL_LISTENER="(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1531))" SCOPE=BOTH; - 强制实例向监听器注册服务:
ALTER SYSTEM REGISTER; - 退出sqlplus后重启监听器:
lsnrctl stop && lsnrctl start
3. docker-compose.yaml调整
- 修改
hadea-database服务的端口映射为"1531:1531" - 修改
hadea-server服务的DATABASE_PORT环境变量值为1531
注意:如果之前已经生成过持久化的oradata数据,需要先删除旧的oradata目录内容,重新初始化数据库实例,否则旧实例的配置仍默认指向1521端口,修改不会生效。
验证方法
进入数据库容器执行lsnrctl status,可以看到监听器运行在1531端口,且已经注册了ORCLCDB、ORCLPDB服务,此时同Docker网络内的其他容器用1531端口即可正常连接。
内容的提问来源于stack exchange,提问作者Jean-Philippe M
相关产品推荐
相关产品推荐

