Systemd 怎么让 Docker 服务开机自启?配置步骤是什么?

文章导读
在基于 systemd 的 Linux 系统中,让 Docker 服务开机自启的标准操作是执行启用命令并配置容器重启策略。适用场景为 CentOS、Ubuntu 等现代发行版,风险边界在于 WSL 环境需额外配置文件且容器自启策略独立于服务自启。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

在基于 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.service

2. 配置容器重启策略

对已运行的容器执行 update 命令,或在 docker-compose 文件中指定 restart 选项。

# 单个容器设置
docker update `--restart`=always 容器名称
# Compose 文件配置
services:
  my_service:
    restart: always

3. 特殊环境配置(WSL)

在 WSL2 环境中,需修改配置文件启用 systemd 支持,否则 systemctl 命令可能无效。

# 修改 /etc/wsl.conf
[boot]
systemd=true
# 修改后需在 PowerShell 执行 wsl `--shutdown` 重启 WSL

怎么验证是否生效

验证分为服务状态检查和模拟重启测试,确保配置持久化。

Systemd 怎么让 Docker 服务开机自启?配置步骤是什么?

1. 检查服务启用状态

执行命令查看 enabled 状态,确认服务已注册到启动目标。

systemctl is-enabled docker.service

2. 检查容器重启策略

查看容器详细信息,确认 RestartPolicy 字段为 always 或 on-failure。

docker inspect 容器名称 | grep RestartPolicy

3. 模拟重启验证

重启系统后登录,检查 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 服务及容器开机自动启动设置指南