核心是启用live-restore:在/etc/docker/daemon.json中配置{"live-restore":true},执行systemctl reload docker生效,并验证docker info输出“Live Restore Enabled: true”。
要让 docker 守护进程(dockerd)重启时容器不中断,核心是启用 live-restore 功能。它不是“重启后快速拉起”,而是让容器在 dockerd 重启过程中持续运行,真正实现无缝延续。
确认并启用 live-restore
这是最关键的一步。默认情况下,重启 dockerd 会杀死所有容器;开启后,容器与守护进程解耦,独立存活:
- 编辑
/etc/docker/daemon.json,添加或修改为:
{"live-restore": true} - 执行
sudo systemctl reload docker(或sudo kill -SIGHUP $(pidof dockerd)),不中断服务即可生效 - 验证是否成功:
docker info | grep -i "live restore"应输出 Live Restore Enabled: true
确保 Docker 服务本身开机自启且健壮
live-restore 起效的前提是 dockerd 能稳定运行。宿主机重启后,若 dockerd 没起来,容器再稳也无意义:
- 检查状态:
systemctl is-enabled docker应返回 enabled;否则运行sudo systemctl enable docker - 增强容错:在
/etc/systemd/system/docker.service.d/override.conf中加入
Restart=always
RestartSec=30s
防止 dockerd 异常退出后长期离线
为关键容器配置合适的 restart 策略
live-restore 解决的是“守护进程重启”场景,而宿主机重启则依赖 restart 策略触发拉起。二者互补:
-
unless-stopped:推荐生产环境使用。宿主机重启后自动启动,但尊重人工
docker stop操作,兼顾自动化与可控性 - always:适合基础设施类容器(如日志采集器、监控 agent),只要 dockerd 启动就强制拉起,不放过任何机会
- 创建时指定:
docker run -d --restart unless-stopped ...
已有容器补设:docker update --restart unless-stopped container-name - 避免用
no或不设——等于放弃自动恢复
验证效果的简单方法
不用等宿主机重启,就能现场测试两种关键场景:
-
测试 live-restore:执行
sudo systemctl restart docker,随后docker ps查看容器是否仍在运行、运行时间是否连续 -
测试宿主机重启恢复:先
docker stop关掉一个容器,再sudo systemctl restart docker,观察它是否按策略自动回来


















