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

使用Fargate运行AWS Batch时容器镜像拉取超时问题求助

AWS Batch Fargate 拉取容器镜像超时问题排查

错误信息

CannotPullContainerError: pull image manifest has been retried 5 time(s): failed to resolve ref public.ecr.aws/amazonlinux/amazonlinux:latest: failed to do request: Head "https://public.ecr.aws/v2/amazonlinux/amazonlinux/manifests/latest": dial tcp [ID]: i/o timeout

任务定义

{
  "jobDefinitionName": "fargate-hello-world",
  "type": "container",
  "containerProperties": {
    "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
    "command": [
      "echo",
      "Hello world",
      "|",
      "aws",
      "s3",
      "cp",
      "-",
      "s3://[BUCKET-NAME]/test.txt"
    ],
    "jobRoleArn": "arn:aws:iam::[ID]:role/ecsTaskExecutionRole",
    "executionRoleArn": "arn:aws:iam::[ID]:role/ecsTaskExecutionRole",
    "resourceRequirements": [
      {
        "value": "2.0",
        "type": "VCPU"
      },
      {
        "value": "4096",
        "type": "MEMORY"
      }
    ]
  },
  "platformCapabilities": [
    "FARGATE"
  ]
}

问题与解答

1. 这是权限/策略问题吗?

不是。该错误属于网络连接超时,权限问题通常会报AccessDenied类错误,而非i/o timeout,因此可以排除权限策略导致当前问题的可能。

2. 这是我的任务定义存在问题吗?

任务定义的command字段存在逻辑问题,但并非导致当前镜像拉取超时的原因。当前command将管道符|作为echo的参数传递,不会触发shell的管道解析,后续若要实现将echo内容写入S3,需要改用shell执行的方式,示例如下:

"command": [
  "sh",
  "-c",
  "echo 'Hello world' | aws s3 cp - s3://[BUCKET-NAME]/test.txt"
]

3. 若都不是,可能是什么原因导致的?

核心原因是网络连通性问题,常见排查方向:

  • 子网互联网访问配置缺失:
    • 若使用私有子网:需确保子网关联了NAT网关,且路由表包含指向NAT网关的路由规则;
    • 若使用公有子网:需确保子网路由表存在指向互联网网关(IGW)的路由,且Fargate任务的ENI分配了公网IP或弹性IP。
  • 安全组出站规则限制:安全组需允许HTTPS(443端口)出站流量,目标可设置为0.0.0.0/0或public.ecr.aws的IP范围。
  • VPC端点配置异常:若通过VPC端点访问ECR Public,需确认已创建com.amazonaws.<区域>.ecr-public类型的VPC端点,且子网、安全组允许访问该端点。
  • DNS解析失败:检查VPC是否启用了「启用DNS解析」和「启用DNS主机名」选项,否则可能无法解析public.ecr.aws的域名。

内容的提问来源于stack exchange,提问作者O.rka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:44:59