关键容器宿主机重启后自动拉起,需确保Docker服务开机自启(systemctl enable docker)并配置容器--restart unless-stopped策略,推荐启用live-restore实现无缝延续。
要让关键容器在宿主机重启后“优先被唤醒”,本质不是让它们比其他容器“先启动几秒”,而是确保它们在 docker 服务就绪后第一时间、稳定可靠地拉起——前提是 docker 自身已开机自启,且容器策略配置得当。系统级依赖和容器级策略必须协同生效。
确保 Docker 守护进程本身开机自启
Docker 服务没起来,容器根本无从谈起。这是最基础也最容易被跳过的一步:
- 运行 systemctl is-enabled docker,输出应为 enabled;如果不是,执行 sudo systemctl enable docker
- 确认当前状态:systemctl is-active docker 应返回 active
- 若使用 systemd 管理,建议额外加一层保障:在 /etc/systemd/system/docker.service.d/override.conf 中写入 Restart=always 和 RestartSec=30s,防止 dockerd 异常退出后长期离线
为关键容器设置强效重启策略
容器是否自启,只取决于它自己的 --restart 策略,与“优先级”无关,但策略选型直接影响唤醒可靠性:
- unless-stopped 是生产环境首选:宿主机重启后自动拉起,但尊重人工干预(docker stop 后不再启动),兼顾自动化与可控性
- always 更激进:只要 dockerd 启动,就尝试拉起,适合核心基础设施类容器(如监控采集器、日志转发器)
- 创建时指定:docker run -d --restart unless-stopped ...;已有容器补设:docker update --restart unless-stopped container-name
- 避免用 no 或未显式设置——这是默认值,等于放弃自动恢复
启用 live-restore 避免 Docker 重启导致容器中断
宿主机重启过程中,Docker 服务会经历 stop → start 流程。默认行为会杀死所有容器,再等 restart 策略触发——这中间存在空窗期。启用 live-restore 可让容器在 dockerd 重启期间持续运行:
- 编辑 /etc/docker/daemon.json,加入:
{"live-restore": true, "disable-crash-files-delete": true} - 执行 sudo systemctl reload docker(不中断服务)
- 验证:docker info | grep -i "live restore" 应显示 Live Restore Enabled: true
- 该配置让容器真正“跨过”守护进程重启,实现无缝延续,比依赖 restart 策略更底层、更及时
补充资源与启动约束(可选但推荐)
对真正关键的容器,还可叠加轻量级控制,进一步提升就绪确定性:
- 添加健康检查:HEALTHCHECK --interval=30s --timeout=3s --retries=3 CMD curl -f http://localhost/health || exit 1,让 Docker 主动识别容器是否真就绪
- 限制资源:--memory=512m --cpus=1.0,防止关键容器因资源争抢启动失败或被 OOM 杀掉
- 若容器依赖特定设备(如 GPU、串口),可在 docker run 中加 --device /dev/nvidia0 并配合 systemd 的 ConditionPathExists=/dev/nvidia0(用于其宿主服务单元),避免设备未就绪时盲目启动


















