AWS ECS更新服务报错:容器backend不存在,改名称后正常,是否为Bug?
Why does AWS ECS UpdateService throw "The container backend does not exist" when container name is "csharp"?
这不是AWS ECS的Bug,而是你的ECS服务与任务定义之间的容器名称关联不匹配导致的预期行为。
问题根源分析
当你首次创建ECS服务时,服务会和任务定义中的特定容器建立绑定关系——比如负载均衡目标组的容器端口映射、服务的健康检查配置等,这些配置都会依赖容器的名称。如果你的服务最初是基于**容器名称为backend**的任务定义创建的,之后你更新任务定义将容器名称改为csharp,但服务的底层配置依然在寻找名为backend的容器,此时调用update-service就会触发InvalidParameterException错误,因为服务找不到匹配的容器。
为什么修改容器名称为backend后能成功?
当你把skeleton.json中的容器名称改回backend时,任务定义里的容器名称和服务配置中预期的容器名称重新匹配,ECS服务就能正常识别并关联这个容器,部署流程自然可以顺利完成。
如果你想保留csharp作为容器名称的解决方法
如果不想改回原容器名称,你需要同步更新ECS服务中所有依赖容器名称的配置:
- 若服务关联了负载均衡,需要更新目标组的容器名称配置,将其指向
csharp - 若服务配置了容器级别的健康检查,需要将健康检查的目标容器名称改为
csharp - 可以通过以下命令更新服务时同步调整这些配置(示例):
aws ecs update-service \ --cluster "${PROJECT_NAME}" \ --service "${PROJECT_NAME}" \ --task-definition "${TASK_DEFINITION_ARN}" \ --force-new-deployment \ --deployment-configuration "maximumPercent=200,minimumHealthyPercent=100" \ --desired-count ${DESIRED_COUNT} \ --load-balancers targetGroupArn=arn:aws:elasticloadbalancing:...:targetgroup/...,containerName=csharp,containerPort=80
简单来说,ECS服务与任务定义的容器名称需要保持一致(或者服务配置明确指定要使用的新容器名称),否则就会出现找不到容器的错误。
内容的提问来源于stack exchange,提问作者Gianmarco Carrieri
相关产品推荐
相关产品推荐

