oracle docker 重启,docker部署文档(三)-关于oracle容器重启后导致应用容器启动失败的解决办法...

docker部署文档(三)-关于oracle容器重启后导致应用容器启动失败的解决办法

发布时间:2020-03-21 10:09:00

来源:51CTO

阅读:651

作者:laihuadongcto

注意:如果应用工程没有变动, 那oracle服务重启后, 应用会自动重新连接, 服务也会恢复正常.

但是如果应用工程在启动时oracle未运行, 数据库连接失败会直接导致工程启动失败, oracle重新运行后也无法恢复, 只能重启应用工程.

为实现docker服务启动 -> oracle容器启动 -> oracle服务启动 -> 应用容器启动的顺序保持不变. 以及实现docker服务启动后, 添加防火墙规则允许容器内部访问宿主机, 需要做如下修改.

1. 修改oracle容器的init.sh脚本

oracle容器中, /root/init.sh脚本原来是使sysctl内核参数及ulimit生效的, 现在修改如下#!/bin/bashsysctl -p

chown oracle:oinstall /opt/oracle

su - oracle <

lsnrctl  start

sqlplus "/as sysdba" <

startup

EOF## 上面的EOF将被两个'<

oracle容器启动后没有运行服务, 进入到容器中, 执行这个脚本就可以启动oracle了.

2. 实现docker服务启动后按顺序启动数据库与应用容器

编辑/usr/lib/systemd/system/docker.service文件(这是一个类.ini的配置文件). 在[Service]块中添加如下行ExecStartPost=/bin/bash /root/onDockerStart.sh

ExecStartPost表示在docker服务启动后执行的操作, 上述行表示在docker服务启动后, 执行onDockerStart.sh脚本. 脚本内容如下#!/bin/bash## 解除容器内部访问宿主机的限制## 有些情况下可能不存在INPUT_direct链iptables -I INPUT_direct -s 172.21.0.0/16 -j ACCEPT || iptables -I INPUT -s 172.21.0.0/16 -j ACCEPT## 启动oracleoracle_cid=$(docker ps | grep oracle-final | awk '{print $1}')

docker exec $oracle_cid bash /root/init.shexit 0对于应用与数据库分离的情况, 只要保证数据库已经启动, 然后重启启动{cas,skydata-se,drgs,hdc-manager,etlloader}这些容器就可以了.

docker stop|start {cas,skydata-se,drgs,hdc-manager,etlloader}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值