AWS ECS任务启动失败求助:任务从PENDING直接转为STOPPED
解决ECS任务因容器统计信息错误导致停止的问题
遇到这种任务直接从PENDING变STOPPED,且日志提示Error converting stats for container XXX: Invalid container statistics reported, no cpu core usage reported的情况,我之前也碰到过几次,分享几个实用的排查和解决思路:
1. 先检查ECS代理版本
这个错误大概率和ECS代理的版本bug有关,旧版本的代理在处理某些容器的CPU统计数据时容易出问题。
- 先查看当前实例上的ECS代理版本:
docker inspect amazon/amazon-ecs-agent | grep "Version" - 如果版本低于1.50.0左右,强烈建议升级到最新稳定版。升级命令参考:
docker stop ecs-agent docker rm ecs-agent docker run -d --name ecs-agent --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /var/log/ecs:/var/log/ecs \ -v /var/lib/ecs/data:/var/lib/ecs/data \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /var/run/docker/execdriver/native:/var/lib/docker/execdriver/native:ro \ -e ECS_CLUSTER=你的集群名称 \ amazon/amazon-ecs-agent:latest
2. 核对任务定义的CPU配置
有时候任务定义里的CPU资源设置不合理,或者宿主机CPU资源被占满,会导致代理无法获取有效的CPU统计数据:
- 检查任务定义中的CPU分配值,确保没有超过容器实例剩余的可用CPU资源
- 登录容器实例,用
top或htop查看CPU使用情况,确认是否有进程占用过高CPU - 如果任务使用了CPU亲和性或者自定义cgroup限制,检查配置是否正确,有没有限制到容器无法报告CPU核心数据
3. 确认Docker版本兼容性
ECS代理和Docker版本有严格的兼容要求,版本不匹配也会导致统计数据收集失败:
- 运行
docker --version查看当前Docker版本,确认它在AWS官方支持的兼容范围内(比如较新的ECS代理通常需要Docker 19.03+版本) - 如果Docker版本太老,考虑升级到兼容的稳定版本,记得升级前备份好相关配置
4. 排查容器本身的退出原因
有时候是容器先异常退出,才导致代理统计数据出错,所以得先看容器自己的日志:
- 用容器ID查看日志:
docker logs <你的容器ID>,看容器启动或运行时有没有报错 - 查看ECS代理的完整日志:
tail -f /var/log/ecs/ecs-agent.log,找容器启动失败的具体原因,比如依赖缺失、端口占用等
5. 重启ECS代理和Docker服务
临时的进程异常或资源冲突也可能导致这个问题,重启服务往往能快速解决:
- 先重启ECS代理:
docker restart ecs-agent - 如果还是不行,尝试重启Docker服务:
systemctl restart docker(注意:生产环境这么做会重启所有运行中的容器,一定要提前做好预案)
6. 检查宿主机的cgroup配置
ECS代理依赖cgroup来收集容器的资源使用数据,如果cgroup挂载异常,就会拿不到CPU统计:
- 检查cgroup挂载情况:
mount | grep cgroup,确保cpu、cpuacct这些组都正常挂载 - 如果挂载有问题,可以尝试重新挂载cgroup,或者直接重启容器实例(生产环境需谨慎操作)
内容的提问来源于stack exchange,提问作者Nick Rolando
相关产品推荐
相关产品推荐

