CannotPullContainerError:拉取映像清单已重试 5 次:无法解析引用 [IMAGE PATH] 无法执行请求:i/o 超时

O.r*_*rka 8 timeout amazon-s3 amazon-web-services aws-batch aws-fargate

我不知道如何通过 Fargate 平台运行 AWS Batch。我想做的就是发出 hello world echo 并将文件写入 S3。

我收到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

这是我注册的工作定义:

{
  "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"
  ]
}

Run Code Online (Sandbox Code Playgroud)

我删除了一些细节并替换为[ID][BUCKET-NAME]

  • 这是权限/策略问题吗?
  • 这是我的工作定义的问题吗?
  • 如果不是,这可能是什么?

我也尝试过仅用作amazonlinux:latest容器路径和完整的 dockerhub 标签docker.io/amazonlinux:latest

我认为这可以解决这个问题,但显然不能: AWS Batch Timeoutconnecting to ECR

任何帮助我朝着正确方向前进的帮助都将非常感激。

Mar*_*k B 13

听起来您要么将 Fargate 任务部署到无法访问 Internet 的私有子网中,要么部署到公共子网但将设置设置assignPublicIpfalse。在任何一种情况下,Fargate 任务都无法访问 VPC 之外的任何内容,因此它无法连接到任何映像注册表,例如 DockerHub 或 ECR。

如果您要部署到私有子网,则需要将 NAT 网关添加到公有子网中的 VPC,并在私有子网的路由表中添加到 NAT 网关的路由。

如果要部署到公共子网,则需要设置assignPublicIptrue