自动重新启动突然停止的Docker容器
你是否有在使用Docker来管理数据库等时,突然发生容器停止的经历呢?
原因可能是内存不足等多种原因,如果是在生产环境中的话,不重新启动会非常麻烦。
我将介绍一个在这种情况下可用的脚本。
剧本
首先,编写以下脚本并保存为一个文件,作为一个shell脚本。
#!/bin/bash
flag=0
for chunk in `sudo docker container ps`
do
if [ $chunk = 'mongodb' ]
then
flag=1
fi
done
if [ $flag -ne 1 ]
then
echo "start mongodb"
sudo docker start mongodb
fi
将其存储为一个名为 check_docker.sh 的文件。
然后将以下内容写入crontab。
* * * * * bash check_docker.sh > check_docker.log 2>&1
每分钟会进行一次检查。
执行命令
我們將詳細查看Shell腳本的命令。
将标志位设为零
flag=0
这是用于控制重新启动的标志。
对以下内容进行中文的同义转述,只需要一个选项:
对于
for chunk in `sudo docker container ps`
获取Docker的运行状态。
使用for循环进行控制,而不是针对每行进行迭代。
检查容器是否存在
if [ $chunk = 'mongodb' ]
then
flag=1
fi
检查容器是否正在运行。
如果存在期望的容器名称,将 flag 设为 1,以便在后续处理中知道它正在运行。
如果没有开启,就重新启动。
if [ $flag -ne 1 ]
then
echo "start mongodb"
sudo docker start mongodb
fi
通过 flag 可以知道启动状态,如果没有启动,则通过 sudo docker start 进行重新启动。
启动命令可能不带 sudo,也可能是通过 shell 脚本启动,需要根据环境进行相应的更改。