2026年11月14日星期六

服务器重启后所有docker容器挂掉无法启动修复

第一步:SSH 登录,检查 docker 服务是否开机启用

  1. # 查看是否 enabled
  2. systemctl is-enabled docker
  3. # 查看当前状态
  4. systemctl status docker
  • 返回 disabled → 根本不会开机启动 docker,容器自然全部不起来
  1. # 启用开机自启
  2. systemctl enable --now docker
  3. systemctl enable containerd

很多 Debian / 自己装 docker 的环境,安装后不会自动 enable,这是最高发原因Docker

第二步:检查所有容器的重启策略

  1. # 列出所有容器+重启策略
  2. docker inspect --format '{{.Name}} {{.HostConfig.RestartPolicy.Name}}' $(docker ps -a -q)
  • no:不自动启动(问题根源)
  • always:系统重启 docker 起来就自动拉
  • unless-stopped:推荐,手动 stop 后不再自动拉起,意外退出 / 主机重启自动拉

批量修改全部容器为 unless-stopped

  1. docker update --restart unless-stopped $(docker ps -a -q)

⚠️ 如果是应用商店新建应用时,一定要勾选【开机自动重启】,否则默认是 no;如果是旧应用,在面板容器编辑页修改重启策略。

第三步:重启后 docker 启动失败 / 启动太晚(第二个高频坑)

执行看开机阶段 docker 日志:

  1. journalctl -u docker -b

常见报错:

  1. /etc/docker/daemon.json json 语法错误、配置写错 → dockerd 启动失败
  2. 数据盘 / 外挂存储(挂载卷)在 docker 之后才挂载(NAS、USB 盘、LVM、加密盘)
    • 现象:docker 启动时找不到挂载目录,容器启动失败直接跳过
    • 解决:systemd 给 docker 加挂载依赖,或者把 docker 数据目录放到系统盘,卷目录放到外部盘并配置x-systemd.mount-timeout
  3. OpenWrt/Armbian 非 systemd 系统:procd 启动顺序问题,dockerd 启动太晚,容器不会自动拉起,需要调整启动优先级

第四步:1Panel Compose 编排的应用(docker-compose)

compose 里的 restart 才生效,单纯靠 1panel compose 管理,不会额外帮你开机启动

  1. services:
  2. xxx:
  3. restart: unless-stopped

修改后必须 docker compose up -d 重建容器,只改 yaml 不 up 不生效。

第五步:临时验证方案(改完后测试)

  1. # 停止docker,模拟主机重启
  2. systemctl stop docker
  3. systemctl start docker
  4. # 看容器是否自动起来
  5. docker ps

如果此时全部自动起来,说明配置没问题,是主机开机顺序 / 挂载问题。

排查优先级速查

  1. systemctl is-enabled docker → disabled 优先修复
  2. 检查容器 restart policy 是不是 no
  3. 看 journalctl -u docker -b 有没有 daemon 报错
  4. 检查容器挂载目录是否是外置盘、开机挂载延迟
  5. 确认不是手动在面板里点过【停止容器】(unless-stopped 模式下手动 stop 后不会自动拉起)

补充:如果你是 Debian

debian 官方 docker 包默认 enable,但如果你是手动脚本安装、或者重装过 docker,经常会变成 disabled。