You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose结合AWS Fargate如何配置容器异常自动回滚策略

问题解决方案

一、当前配置未生效的原因

  1. Docker原生健康检查默认不会作为ECS部署失败的判定依据,ECS侧需要单独配置部署熔断规则才会在容器启动失败时终止部署
  2. 未配置重启策略上限,容器启动失败后会无限重启,不会触发部署失败的判定条件
  3. 如果使用了负载均衡,需要确保ECS服务已关联负载均衡目标组,目标组健康检查配置和容器内健康检查匹配,健康检查失败才会被ECS判定为部署失败

二、docker-compose侧配置调整

首先调整docker-compose配置,限制容器重启次数,避免无限重试:

services:
  web:
    image: AWS-Account-Id.dkr.ecr.us-east-1.amazonaws.com/my-service:2
    environment:
      - ENV=dev
    ports: ["80:80"]
    # 新增重启策略:启动失败最多重试2次,超过后停止重启
    restart: on-failure:2
    healthcheck:
      test: ["CMD", "curl", "-f", "/status"]
      interval: 1m
      timeout: 10s
      retries: 2
      start_period: 40s

三、CloudFormation侧配置自动回滚规则

docker-compose本身不支持自动回滚到上一个版本镜像的能力,需要在CloudFormation的ECS服务配置中添加部署熔断回滚规则,两种配置方式如下:

  • 如果你直接编写CloudFormation模板部署,在AWS::ECS::Service资源中添加如下配置:
DeploymentConfiguration:
  MaximumPercent: 200
  MinimumHealthyPercent: 100
  # 开启部署熔断和自动回滚
  DeploymentCircuitBreaker:
    Enable: true
    Rollback: true

开启后当服务连续2次启动失败就会自动触发熔断,终止当前部署并回滚到上一个正常版本。

  • 如果你使用Docker ECS集成功能,通过docker compose直接部署到AWS,可以在docker-compose中添加扩展字段配置熔断规则:
x-aws-cloudformation:
  Resources:
    WebService:
      Properties:
        DeploymentConfiguration:
          DeploymentCircuitBreaker:
            Enable: true
            Rollback: true

四、效果验证

完成配置后重新部署新版本,若镜像存在问题启动失败:

  • 容器最多重试启动2次
  • ECS自动触发部署熔断,终止当前部署流程,回滚到上一个正常运行的版本
  • CloudFormation部署状态会标记为失败,不会继续执行后续部署步骤

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:27:03