Oracle 12c企业版Docker镜像报ORA-12547:TNS丢失连接故障求助
ORA-12547 TNS丢失连接 Docker部署Oracle解决方案
该报错在Docker部署Oracle场景下的常见触发原因为宿主机内核参数不匹配、共享内存分配不足、进程/文件句柄限制过低,以及Oracle安装目录权限异常,可按照以下步骤逐一排查修复:
1 调整宿主机内核参数
编辑宿主机/etc/sysctl.conf文件,添加以下配置:
fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 kernel.panic_on_oops = 1 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500
保存后执行sysctl -p使配置立即生效。
2 调整容器启动参数
Docker默认给容器分配的共享内存仅为64M,远低于Oracle的最低运行要求,启动容器时必须添加对应资源限制参数,参考启动命令如下:
# 12c企业版启动命令 docker run -d \ --name oracle12c \ -p 1521:1521 \ *--shm-size 2g* \ --ulimit nofile=1024:65536 \ --ulimit nproc=2047:16384 \ store/oracle/database-enterprise:12.2.0.1 # 11g XE版启动命令 docker run -d \ --name oracle11g \ -p 1521:1521 \ *--shm-size 1g* \ --ulimit nofile=1024:65536 \ --ulimit nproc=2047:16384 \ epiclabs/docker-oracle-xe-11g
--shm-size参数建议至少分配1G以上,内存充足的环境可分配4G避免后续运行报错。
3 修复容器内权限配置
进入运行中的容器,执行以下命令修复Oracle目录权限:
# 进入容器 docker exec -it 容器ID /bin/bash # 修复目录归属和权限 chown -R oracle:oinstall $ORACLE_HOME chmod -R 755 $ORACLE_HOME/bin chmod 6751 $ORACLE_HOME/bin/oracle # 切换到oracle用户重启服务 su - oracle lsnrctl stop lsnrctl start sqlplus / as sysdba startup force
4 验证连接
本地连接容器内Oracle时,注意确认对应服务名配置:
- 12c企业版默认服务名为
ORCLCDB.localdomain,默认sys密码为Oradoc_db1 - 11g XE版默认服务名为
XE,默认sys密码为oracle
本地操作系统认证登录无需输入密码,直接执行sqlplus / as sysdba即可登录,如果仍报错,执行strace sqlplus / as sysdba查看系统调用日志即可定位具体错误原因。
内容的提问来源于stack exchange,提问作者yogithesymbian
相关产品推荐
相关产品推荐

