自动重新启动突然停止的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 脚本启动,需要根据环境进行相应的更改。