收起左侧

【教程】docker容器关机重启 不能停止和自动启动的解决

1
回复
43
查看
[ 复制链接 ]

0

主题

6

回帖

0

牛值

江湖小虾

故障问题

docker容器 关机、重启 不能正常停止和恢复

重启后,UI显示异常退出,退出代码255

主要对象

restart: unless-stopped

故障原因和影响

关机时,系统没有优雅处理Docker容器的停止

Docker 守护进程(dockerd)直接被停止,导致容器立即停止,可能引发:

  • 未持久化的数据丢失‌(如内存中的临时数据)
  • 数据库事务未提交‌,造成数据不一致
  • 网络连接异常中断‌,客户端请求失败
  • UI报错,看着难受
  • 重启无法恢复运行容器

解决方案

分别创建 关机脚本 和 开机脚本
运行用户为root

注:可以使用 应用商店中,Lng、RRorg提供的任务计划,比较简便

关机脚本

#!/bin/bash

# 备份位置
SAVE_FILE="/etc/docker/active_containers.list"

# 获取所有容器ID
RUNNING_IDS=$(docker ps -q)

# 清空记录文件
> "$SAVE_FILE"

if [ -n "$RUNNING_IDS" ]; then
    echo "检查容器是否为 unless-stopped"
    for ID in $RUNNING_IDS; do
        POLICY=$(docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' "$ID")
        if [ "$POLICY" == "unless-stopped" ]; then
            echo "$ID" >> "$SAVE_FILE"
        fi
    done
    # 优雅停止
    docker stop $RUNNING_IDS
fi

开机脚本

#!/bin/bash
# 记录文件
SAVE_FILE="/etc/docker/active_containers.list"

if [ -s "$SAVE_FILE" ]; then
    # 将文件内容读取为一行空格分隔的 ID
    CONTAINERS_TO_START=$(cat "$SAVE_FILE" | tr '\n' ' ')
    if [ -n "$CONTAINERS_TO_START" ]; then
        echo "正在启动 unless-stopped 容器"
        docker start $CONTAINERS_TO_START
    else
        echo "没有需要启动的 unless-stopped 容器"
    fi
    # 不清空 正常关机才清空 避免意外断 电没数据
    # > "$SAVE_FILE"
fi

效果预览

1.png2.png

3.png

收藏
送赞 1
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

6

回帖

0

牛值

江湖小虾

2 小时前 楼主 显示全部楼层
建议管理团队收录功能。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则