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

AWS ECS EC2实例未拉取运行任务定义容器问题求助

解决AWS ECS EC2任务Pending且未拉取镜像的问题

1. 验证ECS代理状态与配置

  • 登录EC2实例,执行systemctl status ecs检查ECS代理是否正常运行。若代理未启动,执行systemctl start ecs并设置开机自启systemctl enable ecs。
  • 查看ECS代理配置文件/etc/ecs/ecs.config,确认关键配置:
    • ECS_CLUSTER=<你的集群名称>:必须与任务指定的集群完全一致
    • ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true:确保任务执行角色能调用日志服务(若配置了日志)
    • 若用awsvpc模式,确认ECS_AWSVPC_BLOCK_IMDS=false(避免实例元数据访问限制)

2. 检查实例与集群的关联状态

  • 登录AWS控制台,进入ECS集群的「ECS实例」标签页,确认该t2.micro实例已成功注册到目标集群。若未注册:
    • 执行curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ecsInstanceRole验证实例能否获取角色临时凭证,返回错误则检查IAM角色关联是否正确。
    • 测试实例访问ECS服务端点:执行curl https://ecs.<你的区域>.amazonaws.com,返回403为正常(无签名),超时则说明网络存在出站限制(即使安全组全开,可能是NACL或VPC端点问题)。

3. 任务定义关键配置检查

  • 确认容器镜像地址完全正确:nginx:latest是公共镜像,需确保ecsTaskExecutionRole拥有ecr-public:GetDownloadUrlForLayer、ecr-public:BatchGetImage权限(即使附加FullAccess,也可直接添加ECR Public托管策略验证)。
  • 调整任务资源分配:t2.micro实例仅有1vCPU和1GB内存,任务配置1vCPU+1GB内存会占满资源,导致调度失败。尝试改为0.5vCPU和512MB内存后重新部署。
  • 确认网络模式匹配:awsvpc模式需要子网有可用IP,且ecsTaskExecutionRole需有ec2:CreateNetworkInterface等权限(FullAccess已包含,可确认策略生效)。

4. 深入排查ECS相关日志

  • 查看ECS代理日志:tail -f /var/log/ecs/ecs-agent.log,这里会记录代理与ECS服务的通信、任务调度、镜像拉取细节,即使无nginx相关内容,也能找到任务未调度的原因(如资源不足、集群不匹配、权限错误)。
  • 查看Docker守护进程日志:journalctl -u docker,检查Docker是否有异常,对比手动拉取记录确认Docker本身正常。
  • 查看系统日志:journalctl -f,搜索ecs相关条目,排查实例启动时ECS代理的初始化问题。

5. 隐性网络问题排查

  • 检查VPC网络ACL:即使安全组全开,若NACL限制了出站443端口(访问ECR、ECS服务),会导致实例无法拉取镜像或通信。确保NACL允许所有出站流量(0.0.0.0/0,端口443)。
  • 验证实例DNS配置:执行nslookup public.ecr.aws,若无法解析,说明DNS设置有问题,可手动设置DNS为VPC默认DNS(通常是VPC网段+2)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:24:49