docker守护进程需通过systemd管理而非--restart策略:先执行systemctl enable docker实现开机自启,再在docker.service.d中配置restart=always确保崩溃后自动拉起,二者缺一不可。
docker 守护进程(dockerd)本身不是容器,不能用 --restart 策略管理——那是给容器用的。守护进程是宿主机上的系统服务,它的自动恢复依赖操作系统级的服务管理机制,比如 systemd。
要让 Docker 守护进程在崩溃或宿主机重启后自动拉起,关键不是配容器策略,而是确保它作为系统服务被正确启用和保护。
必须启用 systemd 开机自启
这是最基础也最容易被忽略的一环:
- 运行
sudo systemctl enable docker
→ 把 Docker 服务设为开机自启,宿主机重启后自动启动dockerd - 验证是否生效:
systemctl is-enabled docker,输出应为enabled
检查守护进程当前状态与故障恢复能力
- 查看运行状态:
systemctl status docker - 若发现
failed或inactive,先查日志:journalctl -u docker -n 50 --no-pager - 常见崩溃原因包括磁盘满、配置错误(如
/etc/docker/daemon.json格式异常)、cgroup 冲突等,需针对性修复
可选增强:配置 systemd 自动重启守护进程
即使 dockerd 进程意外退出(非系统重启),也可让 systemd 主动拉起它:
在 /etc/systemd/system/docker.service.d/restart.conf 中添加:
[Service] Restart=always RestartSec=5 StartLimitInterval=0
然后重载配置:
sudo systemctl daemon-reload sudo systemctl restart docker
这样 systemd 会在 dockerd 崩溃后 5 秒内自动重启,避免因守护进程宕机导致所有容器“失联”。
注意:不要混淆层级
-
--restart=always是容器的策略,作用对象是docker run启动的容器 -
systemctl enable docker+Restart=always是宿主机服务的策略,作用对象是dockerd进程
两者缺一不可:没有前者,容器无法自愈;没有后者,容器策略根本没机会执行
宿主机重启后,只有 dockerd 先起来,unless-stopped 或 always 的容器才会跟着启动。否则,再好的容器策略也白搭。











