第一步:SSH 登录,检查 docker 服务是否开机启用
# 查看是否 enabledsystemctl is-enabled docker# 查看当前状态systemctl status docker
- 返回
disabled→ 根本不会开机启动 docker,容器自然全部不起来
# 启用开机自启systemctl enable --now dockersystemctl enable containerd
很多 Debian / 自己装 docker 的环境,安装后不会自动 enable,这是最高发原因Docker
第二步:检查所有容器的重启策略
# 列出所有容器+重启策略docker inspect --format '{{.Name}} {{.HostConfig.RestartPolicy.Name}}' $(docker ps -a -q)
no:不自动启动(问题根源)always:系统重启 docker 起来就自动拉unless-stopped:推荐,手动 stop 后不再自动拉起,意外退出 / 主机重启自动拉
批量修改全部容器为 unless-stopped
docker update --restart unless-stopped $(docker ps -a -q)
⚠️ 如果是应用商店新建应用时,一定要勾选【开机自动重启】,否则默认是 no;如果是旧应用,在面板容器编辑页修改重启策略。
第三步:重启后 docker 启动失败 / 启动太晚(第二个高频坑)
执行看开机阶段 docker 日志:
journalctl -u docker -b
常见报错:
/etc/docker/daemon.jsonjson 语法错误、配置写错 → dockerd 启动失败- 数据盘 / 外挂存储(挂载卷)在 docker 之后才挂载(NAS、USB 盘、LVM、加密盘)
- 现象:docker 启动时找不到挂载目录,容器启动失败直接跳过
- 解决:systemd 给 docker 加挂载依赖,或者把 docker 数据目录放到系统盘,卷目录放到外部盘并配置
x-systemd.mount-timeout
- OpenWrt/Armbian 非 systemd 系统:procd 启动顺序问题,dockerd 启动太晚,容器不会自动拉起,需要调整启动优先级
第四步:1Panel Compose 编排的应用(docker-compose)
compose 里的
restart才生效,单纯靠 1panel compose 管理,不会额外帮你开机启动
services:xxx:restart: unless-stopped
修改后必须 docker compose up -d 重建容器,只改 yaml 不 up 不生效。
第五步:临时验证方案(改完后测试)
# 停止docker,模拟主机重启systemctl stop dockersystemctl start docker# 看容器是否自动起来docker ps
如果此时全部自动起来,说明配置没问题,是主机开机顺序 / 挂载问题。
排查优先级速查
systemctl is-enabled docker→ disabled 优先修复- 检查容器 restart policy 是不是 no
- 看 journalctl -u docker -b 有没有 daemon 报错
- 检查容器挂载目录是否是外置盘、开机挂载延迟
- 确认不是手动在面板里点过【停止容器】(unless-stopped 模式下手动 stop 后不会自动拉起)
补充:如果你是 Debian
debian 官方 docker 包默认 enable,但如果你是手动脚本安装、或者重装过 docker,经常会变成 disabled。