AWS ECS部署报错“Essential container in task exited”排查求助
解决AWS ECS部署时"Essential container in task exited"错误及日志排查方案
1. 查看任务停止原因
进入AWS ECS控制台,定位到失败的任务,查看停止原因字段,这里会直接显示容器退出的错误码(如1表示应用启动失败、137表示内存不足被杀死)或具体触发原因。
2. 排查CloudWatch Logs无日志问题
- 检查执行角色权限:确认
ecsTaskExecutionRole是否包含CloudWatch Logs相关权限,需添加以下策略语句:{ "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:ap-southeast-2:625875865989:log-group:/ecs/docker-api-task:*" } - 确认日志组存在:手动登录CloudWatch控制台,检查是否存在
/ecs/docker-api-task日志组。若未创建,可能是角色权限不足导致自动创建失败,需手动创建或修复权限。 - 本地验证镜像启动:如果容器启动过快导致日志未上传,本地运行镜像查看启动日志:
观察控制台输出,确认应用是否能正常启动、是否有报错信息。docker run -p 3000:3000 625875865989.dkr.ecr.ap-southeast-2.amazonaws.com/imember-app-backend:latest
3. 查看ECS实例本地日志
如果容器未成功上传日志到CloudWatch,登录任务所在的EC2实例,直接查看Docker或ECS代理日志:
- 查看容器日志:
# 先获取容器ID docker ps -a # 查看对应容器的日志 docker logs <容器ID> - 查看ECS代理日志,排查任务启动过程中的错误:
cat /var/log/ecs/ecs-agent.log | grep docker-api-task
4. 检查任务定义配置细节
- 端口监听验证:确认容器内的应用确实在3000端口监听,可本地运行镜像后用
curl localhost:3000测试是否有响应。 - 环境变量检查:任务定义中
environment为空,若应用依赖特定环境变量(如数据库连接、配置参数),需补充到任务定义中。 - 资源配置确认:任务分配了1CPU和3GB内存,检查EC2实例是否有足够的剩余CPU、内存资源运行该任务。
5. 验证ECR镜像可用性
在EC2实例上执行镜像拉取命令,确认镜像能正常获取:
docker pull 625875865989.dkr.ecr.ap-southeast-2.amazonaws.com/imember-app-backend:latest
若拉取失败,检查ECR权限或镜像是否存在。
内容的提问来源于stack exchange,提问作者Gallih Wijana
相关产品推荐
相关产品推荐

