Docker服务开机自启必须用systemctl enable docker,仅start无效;验证需is-enabled返回enabled且重启后docker ps可见容器。

Docker服务开机自启必须用 systemd enable,不能只靠 start
Linux 系统(包括 CentOS 7、Ubuntu 20.04+、Debian 10+)上,Docker 服务本身不自带开机自启逻辑,必须显式启用 systemd 单元。只运行 sudo systemctl start docker 只是临时启动,重启后就失效。
验证当前是否已启用
-
systemctl is-enabled docker—— 输出enabled才算生效;若为disabled或报错static,说明没配 -
systemctl is-active docker—— 确认当前正在运行(active),但不等于开机自启
启用并确认
- 执行
sudo systemctl enable docker(无需加.service后缀,systemd 会自动补全) - 立即启动(如果还没运行):
sudo systemctl start docker - 重启宿主机后,再跑
docker ps,能列出容器才真正验证成功
常见错误现象
- 执行
systemctl enable docker报错Failed to enable unit: Unit file docker.service does not exist:说明 Docker 没装好或安装方式异常(如二进制手动部署未注册 service 文件) - CentOS 7 上装的是
docker-ce但启用失败:检查是否误装了旧版docker(非 CE),应卸载后重装docker-ce并导入官方 GPG 和 repo - 启用后仍不自启:检查
/etc/systemd/system/multi-user.target.wants/下是否有docker.service符号链接;没有则enable实际没写入
为什么不用其他方式
- 不要往
/etc/rc.local里加docker start:systemd 已接管 init,rc.local默认不执行,且时机不可控 - 不要写 cron @reboot:绕过 systemd 生命周期管理,可能在 Docker daemon 尚未就绪时就调用
docker start,导致失败 - 所有基于
docker run的容器自启都依赖这个前提——没这步,容器策略再全也起不来
真正容易被忽略的是:很多用户以为设置了容器的 --restart=always 就万事大吉,结果重启机器发现容器一个没起来——十有八九是 docker.service 自身没启用开机自启。











