1. 简介
在本教程中,我们将学习如何配置 Docker 容器在系统启动时自动运行。首先,我们会介绍 Docker 提供的重启策略(Restart Policies),然后演示如何在不同场景中应用这些策略。
2. 理解 Docker 重启策略
Docker 提供了内置的 重启策略,用于控制容器是否在 Docker 守护进程重启或主机系统重启时自动启动。这些策略可以在创建容器时指定,也可以后续对已有容器进行更新。
使用 docker run
命令时,通过 --restart
参数设置重启策略。Docker 提供了以下四种策略:
策略 | 描述 |
---|---|
no |
默认策略,不自动重启容器 |
on-failure[:max-retries] |
容器非正常退出时重启,可指定最大重试次数 |
always |
容器总是自动重启,包括 Docker 守护进程重启时 |
unless-stopped |
类似 always ,除非手动停止,否则一直自动重启 |
注意事项
- 策略只在容器成功运行至少 10 秒后生效,防止启动失败循环。
- 如果容器是被手动停止的,只有在守护进程重启后才会再次启动。
- 要确保容器能开机自启动,Docker 服务本身也必须设置为开机启动,通常通过系统服务管理器配置,如
systemd
:
sudo systemctl enable docker
3. 创建容器时设置重启策略
创建容器时,使用如下命令格式指定重启策略:
docker run -d --restart=<policy> --name <container-name> <image-name>
其中 -d
表示后台运行,若不加该参数容器会在前台运行并占用当前终端。
示例:创建一个始终重启的 Nginx 容器
docker run -d --restart=always --name restart_always nginx
创建完成后查看容器状态:
docker ps
输出示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8eca70915f11 nginx "/docker-entrypoint..." 13 seconds ago Up 12 seconds 80/tcp restart_always
重启 Docker 守护进程验证容器是否自动启动:
sudo systemctl restart docker
docker ps
对比 CREATED
和 STATUS
字段,若 STATUS 时间较新,说明容器确实重启了。
4. 为已有容器添加重启策略
对已存在的容器,可以使用 docker update
命令更新其重启策略:
docker update --restart=<policy> <container-name>
示例:为已有容器设置 always 策略
docker run -d --name restart_always nginx
docker inspect -f "{{ .HostConfig.RestartPolicy.Name }}" restart_always
# 输出: no
docker update --restart=always restart_always
docker inspect -f "{{ .HostConfig.RestartPolicy.Name }}" restart_always
# 输出: always
再次重启 Docker 守护进程验证:
sudo systemctl restart docker
docker ps
5. 在 Docker Compose 中配置重启策略
当使用 Docker Compose 部署多个服务时,可以在 docker-compose.yml
文件中为每个服务单独设置重启策略。
示例:定义 Nginx 和 Redis 服务始终重启
services:
redis:
image: redis
ports:
- '6379:6379'
restart: always
web:
image: nginx
ports:
- "80:80"
restart: always
depends_on:
- redis
启动服务:
docker compose up -d
输出示例:
[+] Running 3/3
✔ Network restart_always_default Created 0.1s
✔ Container restart_always-redis-1 Started 0.1s
✔ Container restart_always-web-1 Started 0.0s
重启 Docker 守护进程后,验证容器是否自动启动:
sudo systemctl restart docker
docker ps
6. 小结 ✅
- Docker 提供了四种重启策略:
no
、on-failure
、always
、unless-stopped
- 使用
--restart
参数可在创建容器时设置策略 - 使用
docker update
可为已有容器更新策略 - 在 Docker Compose 中通过
restart:
字段配置策略 - 要确保容器能开机自启动,Docker 服务本身也必须设置为开机启动:
sudo systemctl enable docker
⚠️ 踩坑提醒:
容器必须运行至少 10 秒后策略才生效;手动停止的容器不会自动重启,除非 Docker 守护进程重启。
合理使用重启策略,可以大大提升服务的可用性和稳定性。