在生产环境配置 Docker 容器 always 重启策略,需在启动时添加`--restart`=always参数或对已有容器执行docker update,并确保 Docker 服务本身已设置开机自启。该策略适用于 Web 服务器、数据库等需长期运行的服务,但需注意若应用启动即崩溃可能导致无限重启循环。
先说结论:always 策略能实现容器退出或宿主机重启后自动恢复,但依赖 Docker 守护进程存活且配置正确。
- 适合:生产环境长期运行的核心服务,如 Nginx、MySQL、业务后端。
- 先准备:确认 Docker 服务已设为开机自启(systemctl enable docker),避免容器策略生效但守护进程未运行。
- 验收:使用
docker inspect查看 RestartPolicy 字段,并重启宿主机验证容器是否自动拉起。
命令速用版
创建新容器时直接指定策略:
docker run -d `--name` my-service `--restart`=always -p 80:80 nginx:alpine
为已运行的容器补充策略:
docker update `--restart`=always <容器名或 ID>
docker-compose 文件中配置:
services:
web:
image: nginx:latest
restart: always为什么会这样
always 策略生效的核心在于 Docker 守护进程的状态监控机制。当容器配置为 always 后,Docker 守护进程会持久化记录该策略,一旦检测到容器状态变为 stopped(无论退出码是 0 还是非 0),或守护进程自身重新启动(如宿主机重启后),都会立即触发容器重启流程。这一机制不依赖容器内应用的健康状态,仅关注进程存活,因此能保障基础可用性,但无法解决应用内部死锁问题。
分步处理
步骤 1:确保 Docker 服务开机自启
容器重启策略依赖 Docker 守护进程运行。在 Linux 系统中执行以下命令确保 Docker 服务随系统启动:
sudo systemctl enable docker.service
步骤 2:配置容器重启策略
若是新容器,在docker run时加入`--restart`=always。若是已有容器,使用docker update命令修改,无需重建容器:
docker update `--restart`=always <容器名>
步骤 3:处理特殊情况
若希望容器被手动停止(docker stop)后不再自动重启,可改用unless-stopped策略,避免运维操作后容器意外拉起。
怎么验证是否生效
检查配置字段
使用 inspect 命令查看容器宿主配置,确认 RestartPolicy 名称为 always:
docker inspect `--format`='{{.HostConfig.RestartPolicy.Name}}' <容器名>输出always即表示配置成功。物理验证:重启宿主机服务器,观察容器是否自动进入 Up 状态:
docker ps -a
若容器状态为 Up 且重启次数(RESTARTS)合理,说明策略生效。
常见坑
无限重启循环:若应用代码存在启动即崩溃的 bug,always 策略会导致容器反复重启,占用系统资源。建议配合HEALTHCHECK或日志监控排查。Docker 服务未自启:仅配置容器策略而忽略 Docker 服务本身的开机自启,宿主机重启后容器无法恢复。手动停止失效:always 策略下,即使执行docker stop,当 Docker 服务重启时容器仍会被拉起。若需保留手动控制权,应使用unless-stopped。
常见问题
already running 容器如何添加重启策略?
无需停止容器,直接使用docker update `--restart`=always <容器名>即可实时生效,配置会持久化保存。
always 和 unless-stopped 有什么区别?
always 在任何停止后都会重启,包括手动停止;unless-stopped 仅在容器未被手动停止的情况下自动重启,更适合需要人工干预场景。
重启策略能替代健康检查吗?
不能。重启策略仅监控进程存活,无法检测服务是否响应请求。生产环境建议同时配置HEALTHCHECK或外部监控。
参考来源
- Docker 生产环境必备技能
- 如何在 Docker 中利用 Restart-Policy 配置容器崩溃后的自动拉起机制
- always 重启策略失效?90% 开发者忽略的 3 个关键配置细节
- 如何正确使用 Docker 的`--restart`=always?这 4 种典型误用你中招了吗?
- docker 容器运行时忘了加自动重启命令了,之后如何添加自动重启命令,使其随开机自动重启
- docker-compose restart 介绍使用
- Docker 服务及容器开机自动启动设置指南