Compose 版本 3.8 如何设置容器重启策略 restart always 配置

文章导读
在 Docker Compose 3.8 版本中,直接在服务层级添加 restart: always 即可实现容器退出后自动重启,适用于非 Swarm 模式的 standalone Docker 环境。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

在 Docker Compose 3.8 版本中,直接在服务层级添加 restart: always 即可实现容器退出后自动重启,适用于非 Swarm 模式的 standalone Docker 环境。

先说结论:配置简单但需注意部署模式,Swarm 模式下该配置会被忽略。

  • 适合:本地开发、单机生产环境或非 Swarm 集群
  • 先准备:备份原有 docker-compose.yml 文件
  • 验收:通过 docker ps 确认重启策略已生效

命令速用版

docker-compose.yml 的服务节点下直接加入重启策略:

version: '3.8'
services:
  web:
    image: nginx
    restart: always

为什么会这样

restart: always 表示容器退出时总是重启,且 Docker 守护进程启动时也会启动该容器。在 Compose 文件版本 3.x 中,该配置仅对 docker compose up 生效;如果使用 docker stack deploy 部署到 Swarm 集群,顶层的 restart 配置会被忽略,必须改用 deploy.restart_policy

Compose 版本 3.8 如何设置容器重启策略 restart always 配置

分步处理

  1. 编辑配置文件:打开 docker-compose.yml,找到目标服务。
  2. 添加策略:在缩进正确的层级下写入 restart: always
  3. 重载服务:执行 docker compose up -d 应用变更。
  4. 回滚提醒:若配置导致容器无法启动,可先注释该行再重载。

怎么验证是否生效

使用以下命令查看容器状态和重启策略:

docker ps `--format` "table {{.Names}}\t{{.Status}}\t{{.RestartPolicy}}"

或者检查具体容器详情:

docker inspect <容器名> | grep -A 5 RestartPolicy

确认输出中 Namealways

常见坑

  • Swarm 模式无效:在 docker stack deploy 场景中,顶层 restart 不生效,需配置 deploy 段落。
  • 缩进错误:YAML 对缩进敏感,确保 restartimage 同级。
  • 循环重启:若容器因错误立即退出,always 会导致无限重启循环,需配合日志排查根本原因。

参考来源

  • Docker 官方文档 - Compose file reference, Services top-level element, URL: https://docs.docker.com/compose/compose-file/05-services/#restart