AWS ECS部署React应用至EC2实例触发熔断故障排查
问题排查与解决建议
针对你遇到的ECS部署熔断问题,结合手动运行正常的情况,从以下几个方向排查:
1. 实例资源是否充足
你的任务定义给容器分配了1024 CPU单位和1024MB内存,但EC2实例需要预留资源给ECS Agent、系统进程等。如果用的是t2.micro这类1vCPU/1GB内存的实例,剩余资源根本不足以启动任务,直接触发部署熔断。
- 检查ECS集群内实例的剩余资源:在ECS控制台集群页面,查看实例的
可用CPU和可用内存指标 - 调整任务资源分配:如果实例资源有限,把cpu和memory调低,比如改成
256CPU单位和512MB内存后重试部署
2. 主机端口冲突
任务定义里hostPort设为80,若EC2实例上已有进程占用该端口(比如之前手动启动的容器未停止、实例自带web服务),ECS任务会因无法绑定端口启动失败。
- 登录EC2实例,执行
netstat -tulpn | grep :80检查80端口占用情况 - 若端口被占用,要么停止占用进程,要么修改任务定义的
hostPort为其他空闲端口(比如3000),或设为0启用动态端口映射
3. 补充日志配置定位启动失败原因
当前任务定义未配置日志驱动,容器启动失败后无法查看具体错误信息,建议添加日志配置将容器日志输出到CloudWatch:
修改容器定义部分,新增logConfiguration:
"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/my-app", "awslogs-region": "eu-north-1", "awslogs-stream-prefix": "ecs" } }
- 提前在CloudWatch创建对应日志组
/ecs/my-app - 确保
ecsTaskExecutionRole已附加AmazonECSTaskExecutionRolePolicy托管策略(包含CloudWatch日志写入权限)
部署后查看CloudWatch日志,即可明确容器启动失败的具体原因(如镜像拉取失败、依赖缺失等)
4. 验证IAM执行角色权限
尽管任务定义包含ECR拉取属性,仍需确认ecsTaskExecutionRole权限完整:
- 检查角色是否附加
AmazonECSTaskExecutionRolePolicy托管策略 - 确认策略包含ECR的
GetDownloadUrlForLayer、BatchGetImage、BatchCheckLayerAvailability权限,以及CloudWatch日志相关权限 - 若使用自定义策略,确保未遗漏上述必要权限
5. 检查EC2实例的ECS Agent状态
ECS Agent负责在实例上启动任务,若Agent状态异常会导致任务无法启动:
- 登录EC2实例,执行
sudo systemctl status ecs(Amazon Linux 2)检查Agent运行状态 - 若Agent未运行,执行
sudo systemctl start ecs重启服务 - 查看Agent日志:
cat /var/log/ecs/ecs-agent.log,排查镜像拉取、容器启动相关错误
内容的提问来源于stack exchange,提问作者Martin S
相关产品推荐
相关产品推荐

