Docker 容器挂了怎么办?一招设置自动重启!


你是否遇到这样的问题:某服务因为环境 CPU 运力不足导致该服务器上的 Jenkins 容器构建项目的时候会挂掉 ,然后需要重新执行 docker restart <容器ID>。

这个过程非常麻烦,所以想让它自动重启。此时:可以写个检测容器是否挂掉的脚本,然后加到服务器的定时任务中,自动触发扫描就可以了。此方案在生产环境中不建议使用,频繁扫描会浪费性能,建议提高服务器的性能等方案。

编写检测脚本

#!/bin/bash  
  
# 容器名称  
CONTAINER_NAME="myjenkins"  
  
# 检查容器状态并重启  
check_and_restart_container() {  
    # 获取容器 ID  
    CONTAINER_ID=$(docker ps -aqf "name=^${CONTAINER_NAME}$")  
  
    if [[ -z "$CONTAINER_ID" ]]; then  
        # 容器不存在,直接退出  
        exit 0  
    fi  
  
    # 检查容器状态  
    STATUS=$(docker inspect -f '{{.State.Running}}'$CONTAINER_ID 2>/dev/null)  
  
    # 如果容器不存在或者已停止,重启容器  
    if [[ "$STATUS" != "true" ]]; then  
        docker restart $CONTAINER_ID >/dev/null 2>&1  
    fi  
}  

授权脚本执行权限

chmod +x /local/cron/check_and_restart_container.sh  

添加到定时任务

每10秒执行一次

* * * * * /local/cron/check_and_restart_container.sh  
* * * * * sleep 10 && /local/cron/check_and_restart_container.sh