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

Terraform部署ECS任务拉取容器镜像失败排查求助

问题定位与排查步骤

1. 先确认镜像仓库的权限状态

  • 本地执行docker pull public.ecr.aws/j0m1s7l0/la-client-api:latest测试拉取。如果本地也返回DENIED: Not Authorized,说明该ECR仓库未设置为公共可见:
    • 登录AWS控制台,找到对应公共ECR仓库,检查Repository visibility是否为Public;
    • 确认latest标签的镜像确实存在于仓库中,避免标签不存在导致的拉取失败。
  • 注意:公共ECR仓库的地址格式是public.ecr.aws/<alias>/<image-name>,别混淆成私有ECR的地址(通常是<account-id>.dkr.ecr.<region>.amazonaws.com)。

2. 排查网络配置(核心,换Docker Hub也失败说明大概率是网络问题)

2.1 NAT网关配置验证

  • 检查Terraform中aws_nat_gateway的subnet_id是否关联到ECS任务所在的私有子网;
  • 确认NAT网关已绑定弹性IP(aws_eip资源正确关联);
  • 私有子网的路由表必须包含默认路由:0.0.0.0/0 -> NAT网关ID,且该路由表已与私有子网关联(Terraform中aws_route_table_association资源配置正确)。

2.2 VPC DNS设置

  • 确保VPC的enable_dns_support和enable_dns_hostnames参数都设为true(Terraform中aws_vpc的这两个字段配置)。DNS解析失败会导致无法解析镜像仓库域名,出现dial tcp ... i/o timeout。

2.3 安全组与网络ACL

  • ECS任务使用的安全组必须允许出站HTTPS(443端口)流量到0.0.0.0/0;
  • 私有子网的网络ACL需配置:
    • 出站规则允许443端口流量;
    • 入站规则允许临时端口(1024-65535)的响应流量(网络ACL是无状态,需双向放行)。

3. ECS任务相关配置检查

  • 任务定义的网络模式为awsvpc时,任务会直接使用子网的网络配置,需确保子网、安全组关联正确;
  • 任务执行角色需附加AmazonECSTaskExecutionRolePolicy托管策略(虽然公共镜像拉取不需要身份验证,但该角色负责镜像拉取的基础操作);
  • 核对任务定义中的镜像地址拼写,避免仓库ID、镜像名、标签错误。

4. 直接测试私有子网的网络连通性

在任务所在的私有子网中启动一台EC2实例,使用相同的安全组和子网配置,执行以下测试:

  • 解析域名:nslookup public.ecr.aws,确认能正常返回IP;
  • 测试HTTPS访问:curl -v https://public.ecr.aws/v2/j0m1s7l0/la-client-api/manifests/latest,根据返回结果定位是网络问题还是镜像权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:15:02