ECS Fargate任务无法拉取容器镜像问题排查求助
排查ECS Fargate任务拉取镜像超时问题
核心问题定位
错误提示CannotPullContainerError: ... dial tcp XXX.XX.XXX.34:443: i/o timeout,说明私有子网内的Fargate任务无法通过NAT网关访问公网(此处为ghcr.io镜像仓库),需从NAT网关关联配置、网络权限、VPC属性三个维度逐一排查:
具体排查步骤
NAT网关与路由表配置校验
- 确认NAT网关已绑定弹性公网IP(EIP),且NAT网关状态为"可用"
- 检查私有子网关联的路由表,必须包含
0.0.0.0/0指向NAT网关的路由条目,且路由表已正确关联目标私有子网 - 核对Terraform中
aws_nat_gateway的allocation_id是否正确绑定EIP资源,aws_route_table_association是否关联了私有子网和对应路由表
安全组与网络ACL权限检查
- Fargate任务的安全组需配置出站HTTPS(443端口)允许规则,目标CIDR设为
0.0.0.0/0,确保任务能发起公网请求 - 子网的网络ACL:入站需允许NAT网关返回的临时端口(1024-65535)流量,出站需允许443端口流量到
0.0.0.0/0,注意规则优先级(拒绝规则不能覆盖允许规则)
- Fargate任务的安全组需配置出站HTTPS(443端口)允许规则,目标CIDR设为
VPC与子网属性验证
- 确认私有子网的
map_public_ip_on_launch属性为false,避免任务直接分配公网IP绕开NAT网关配置 - 检查VPC的
enable_dns_support和enable_dns_hostnames是否设为true,确保任务能正常解析域名(即使错误中已解析出IP,DNS配置异常也可能导致连接超时)
- 确认私有子网的
快速验证方案
在目标私有子网内临时启动一台EC2实例,执行命令:
curl https://ghcr.io/v2/mlflow/mlflow/manifests/latest
若同样超时,问题出在VPC/子网/NAT网关的基础网络配置;若能正常返回,则需排查Fargate任务的安全组或任务定义配置。
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

