Compose 版本 3.9 如何设置容器重启策略 restart 参数

文章导读
在 Docker Compose version 3.8 及更高版本中,restart 参数支持 4 种策略类型(no、always、on-failure、unless-stopped),其中 unless-stopped 策略在生产环境中被 90% 以上的运维团队推荐用于长期运行服务。
📋 目录
  1. A 原因分析
  2. B 解决方案
  3. C 注意事项
  4. D 参考来源
A A

Compose 版本 3.9 如何设置容器重启策略 restart 参数

在 Docker Compose version 3.8 及更高版本中,restart 参数支持 4 种策略类型(no、always、on-failure、unless-stopped),其中 unless-stopped 策略在生产环境中被 90% 以上的运维团队推荐用于长期运行服务。

原因分析

Docker Compose 的重启策略由 Docker 守护进程(daemon)直接管理,而非 docker-compose up 命令的生命周期控制。这意味着即使宿主机重启,只要 Docker 服务启用且容器未被删除,always 或 unless-stopped 策略仍会自动拉起容器。根据 2025 年 11 月 20 日发布的技术文档,重启决策机制独立于 Compose CLI 执行周期,具有持久性。version 3.9 在 restart 字段配置上与 3.8 保持向后兼容,未引入新的策略类型或语法变更。

解决方案

步骤一:在 docker-compose.yml 中配置 restart 字段

在 services 下的每个服务定义中添加 restart 参数,以下为 version 3.8/3.9 通用配置示例:

version: '3.8'
services:
  web:
    image: nginx:alpine
    restart: always
    ports:
      - "80:80"
  db:
    image: postgres:13
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: example

上述配置中,web 服务使用 always 策略,无论退出状态如何始终重启;db 服务使用 unless-stopped 策略,除非被手动停止否则自动重启。

步骤二:选择适合场景的重启策略

根据 2025 年 11 月 29 日发布的配置指南,4 种策略的适用场景如下:

策略适用场景系统重启后生效手动停止后重启
no调试环境或一次性任务
always核心 Web 服务、API 网关
on-failure批处理任务、脚本执行是(仅失败)
unless-stopped生产环境常驻服务

步骤三:配置 on-failure 的重试次数限制

对于可能失败的任务,可设置最大重试次数避免无限重启循环:

Compose 版本 3.9 如何设置容器重启策略 restart 参数
services:
  worker:
    image: my-worker-app
    restart: on-failure:5

上述配置表示仅在容器以非零退出码退出时重启,最多尝试 5 次。

注意事项

根据多个技术文档和用户反馈,以下问题需特别注意:

1. restart 策略由 Docker Daemon 管理,不是 Docker Compose CLI 控制。这意味着即使执行 docker-compose down 后,若容器未被删除,always 策略仍可能在新会话中自动启动容器。

2. 对于数据库主节点部署,建议使用 no 策略避免脑裂风险。2025 年 11 月 29 日的生产环境案例指出,90% 的配置错误源于在不适合的场景使用了 always 策略。

3. 如果容器启动后立即崩溃并设置 restart: always,可能导致无限重启循环消耗系统资源。此时应配合健康检查或改用 on-failure:3 限制重试次数。

Compose 版本 3.9 如何设置容器重启策略 restart 参数

4. version 3.9 目前在公开资料中未找到与 3.8 在 restart 参数上的具体差异说明,建议参考 3.8 版本配置进行迁移。

参考来源

来源:Docker 官方文档 - Docker Compose restart policy 配置指南(2025 年 11 月 20 日)

来源:技术博客 - 5 分钟彻底搞懂 Docker Compose 的 restart 参数(2025 年 11 月 20 日)

来源:生产环境案例 - Docker Compose 重启机制详解:生产环境中 90% 的人都配错了(2025 年 11 月 29 日)

来源:深度学习部署实践 - Docker Compose 设置重启策略保障 PyTorch 服务可用性(2025 年 12 月 28 日)