关键是要确保docker服务开机自启且容器设--restart策略:执行sudo systemctl enable docker并确认enabled;新建容器用--restart=unless-stopped,已有容器用docker update --restart=unless-stopped补设。

要让 Docker 容器随宿主机开机自动重启,关键不是“启动容器”,而是让容器在 Docker 服务就绪后,按预设策略自动拉起。这依赖两个必要条件:Docker 服务本身开机自启,且容器设置了合适的 --restart 策略。
确保 Docker 服务开机自启
Docker 容器无法自启的前提是 Docker 守护进程没起来。必须先保证 dockerd 随系统启动:
- 执行
sudo systemctl enable docker,创建开机启动链接 - 运行
systemctl is-enabled docker,确认输出为 enabled - 如需立即生效(不等重启),再执行
sudo systemctl start docker
为容器设置合理的重启策略
重启策略决定容器退出或宿主机重启后是否恢复运行。推荐根据用途选择:
-
unless-stopped:最常用。宿主机重启后自动启动;但若你手动执行过
docker stop,它就不会再拉起——兼顾自动化与人工可控性 - always:更激进。只要 dockerd 启动,就强制拉起容器,适合核心基础设施(如监控 agent、日志采集器)
- on-failure[:max]:仅非零退出码时重试,适合批处理类任务
- no:默认值,等于放弃自启能力,不建议用于生产服务
配置方式:新建容器 or 更新已有容器
策略可在创建时指定,也可后期补设,效果一致:
- 新建容器:
docker run -d --restart unless-stopped --name app nginx - 更新已有容器:
docker update --restart unless-stopped app - 批量更新所有容器(慎用):
docker update --restart unless-stopped $(docker ps -aq)
进阶:启用 live-restore 减少空窗期
默认情况下,Docker 服务重启(如升级 daemon)会杀死所有容器,再靠 restart 策略重建——存在中断。启用 live-restore 可让容器跨过 dockerd 重启继续运行:
- 编辑
/etc/docker/daemon.json,加入:{"live-restore": true} - 重载配置:
sudo systemctl reload docker - 验证:
docker info | grep -i "live restore"应显示 Live Restore Enabled: true











