在基于 systemd 的 Linux 系统中,让 Docker 服务开机自启的标准操作是执行启用命令并配置容器重启策略。适用场景为 CentOS、Ubuntu 等现代发行版,风险边界在于 WSL 环境需额外配置文件且容器自启策略独立于服务自启。
先说结论:通过 systemd 管理 Docker 服务自启需执行 enable 命令,同时容器内部需设置 restart 策略才能确保业务随系统恢复。
- 适合:使用 systemd 初始化系统的 Linux 主机环境
- 先看:确认 Docker 服务单元文件是否存在及当前状态
- 建议:同时配置服务自启和容器重启策略以防单点失效
命令速用版
以下命令可直接在终端执行,需具备 root 或 sudo 权限。
# 启用 Docker 服务开机自启
sudo systemctl enable docker.service
# 立即启动 Docker 服务
sudo systemctl start docker.service
# 设置所有现有容器开机自启
docker update `--restart`=always $(docker ps -q)为什么会这样
Systemd 是 Linux 系统的服务管理器,Docker 安装后会自动注册服务单元文件但默认不一定启用。
Docker 服务自启仅保证 Docker 守护进程运行,不保证容器自动拉起。容器是否随服务启动取决于创建时的重启策略或后续更新配置,两者属于不同层级的配置,公开资料中没有看到可靠的量化数据表明单一配置能覆盖所有场景。
分步处理
配置过程分为服务层启用和容器层策略设置,每一步操作后需检查状态。
1. 检查并启用 Docker 服务
查看服务文件状态,若显示 disabled 则执行启用命令。
systemctl list-unit-files | grep docker
systemctl enable docker.service2. 配置容器重启策略
对已运行的容器执行 update 命令,或在 docker-compose 文件中指定 restart 选项。
# 单个容器设置
docker update `--restart`=always 容器名称
# Compose 文件配置
services:
my_service:
restart: always3. 特殊环境配置(WSL)
在 WSL2 环境中,需修改配置文件启用 systemd 支持,否则 systemctl 命令可能无效。
# 修改 /etc/wsl.conf
[boot]
systemd=true
# 修改后需在 PowerShell 执行 wsl `--shutdown` 重启 WSL怎么验证是否生效
验证分为服务状态检查和模拟重启测试,确保配置持久化。
1. 检查服务启用状态
执行命令查看 enabled 状态,确认服务已注册到启动目标。
systemctl is-enabled docker.service2. 检查容器重启策略
查看容器详细信息,确认 RestartPolicy 字段为 always 或 on-failure。
docker inspect 容器名称 | grep RestartPolicy3. 模拟重启验证
重启系统后登录,检查 Docker 服务及容器是否自动运行。
sudo systemctl reboot
# 重启后执行
docker ps常见坑
配置过程中容易忽略容器策略独立性及特殊环境兼容性,导致服务起但容器不起。
- 容器未自启:仅启用 docker.service 不够,必须为容器设置 `--restart`=always 策略。
- WSL 环境失效:Windows 子系统默认不启用 systemd,需修改 wsl.conf 并重启 WSL 实例。
- 依赖顺序问题:若容器依赖网络或其他服务,需在 systemd 单元文件中配置 After 和 Wants 依赖关系。
- 权限不足:执行 systemctl 和 docker update 命令通常需要 sudo 权限或加入 docker 用户组。
常见问题
Docker 服务自启和容器自启是一回事吗?
不是,服务自启仅保证 Docker 守护进程运行,容器自启需单独设置重启策略。
WSL2 中 systemctl 命令无法使用怎么办?
需在/etc/wsl.conf 中配置 systemd=true 并重启 WSL,否则无法使用 systemd 管理服务。
docker-compose 管理的容器如何设置自启?
在 compose 文件的 services 下为每个服务添加 restart: always 字段即可。
设置后如何取消开机自启?
服务层使用 systemctl disable docker.service,容器层使用 docker update `--restart`=no 容器名称。
参考来源
- Docker 服务及容器设置服务器开机自动启动方式
- 别再手动重启了!Docker 容器开机自启动的 3 种实用方法 (附脚本)
- wsl 中 ubuntu 开启 systemd,实现 docker 服务自启动
- Linux 下设置 Docker 容器开机自启动及常用命令总结
- Docker 服务及容器开机自动启动设置指南