ECS Fargate 任务失败:CannotPullContainerError:检查图像已重试 5 次:httpReaderSeeker:打开失败:意外状态代码

2024-01-07

我们正在运行其他 ECS 服务,这些服务使用我们的私有 ECR 存储库中的映像。然而,对于同一集群中尝试从 Docker Hub 拉取的服务,我们收到以下错误:

CannotPullContainerError:检查图像已重试 5 次:httpReaderSeeker:打开失败:意外状态代码 https://registry-1.docker.io...:4...

(消息本身在末尾被截断:它实际上是“4...”)。

从它收到状态代码响应的事实来看,这表明它能够与 Docker Hub 通信,并且这不是我们的 AWS 配置中的网络连接问题。我们正在尝试在我们的 ECS 任务中使用来自公共存储库的图像,一个是 Redis 图像,另一个是 Hasura 图像。我不确定如何查看状态代码本身,因为它在 AWS 控制台中被截断。

当我击中URL https://registry-1.docker.io/v2/hasura/graphql-engine/manifests/sha256:0b62bc854e92f1859b5c9c19ce40c4bfaa643b65b1807e2cf55a4078db30b8a8从我的浏览器中的错误来看,这是响应:

{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"hasura/graphql-engine","Action":"pull"}]}]}

我通过 Redis 镜像得到了类似的响应。我认为我们不需要任何身份验证来提取公共镜像 - 我们过去运行 ECS 任务不需要对 Docker Hub 进行身份验证?

为了完整起见,我添加了以下检查来解决此错误,但是如上所述,由于我们从 Docker Hub 获取响应代码,因此这些检查看起来并不相关。

AWS有这个故障排除指南 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_cannot_pull_image.html“CannotPullContainer”错误,对于 Fargate 上的这个特定错误,有本指南 https://aws.amazon.com/premiumsupport/knowledge-center/ecs-fargate-pull-container-error/。以下是我们检查过的指南中的内容:

确认您的 VPC 网络配置允许您的 Amazon ECS 基础设施访问映像存储库

此 ECS 任务位于私有子网中,其路由表具有以下路由:

10.0.0.0/16 -> local (active)
0.0.0.0/0 -> NAT Gateway (active)

NAT 网关处于可用状态并分配了弹性 IP 地址。

检查VPC DHCP选项集

查看 VPC 并转到 DHCP 选项集,我们可以看到域名服务器设置为:“AmazonProvidedDNS”

检查任务执行角色权限 有关配置此功能的更多详细信息位于本指南 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html.

“任务角色”和“任务执行角色”的任务定义中使用相同的 IAM 角色。这是使用上述指南中定义的以下默认策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:CreateLogStream",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetAuthorizationToken",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability"
            ],
            "Resource": "*"
        }
    ]
}

检查图像是否存在

这是图像 https://hub.docker.com/layers/hasura/graphql-engine/v1.3.0/images/sha256-45a57d1e3170c6ca06b0c8f979822daafd77461e888daf3db584032aa1f821ba?context=explore我们正在尝试从 Docker Hub 中提取数据。该图像存在,我可以从本地计算机中提取它,而无需进行身份验证。


我遇到了同样的问题,并花了一整天的时间寻找我的配置中的错误。

事实证明,DockerHub 阻止了我的 ECS 任务拉取 docker 镜像的请求https://www.docker.com/increase-rate-limits https://www.docker.com/increase-rate-limits.

如果您从 DockerHub 提取镜像并遇到同样的问题,只需等待 6 小时或创建一个新集群,该集群将为您提供新的 IP 地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ECS Fargate 任务失败:CannotPullContainerError:检查图像已重试 5 次:httpReaderSeeker:打开失败:意外状态代码 的相关文章

随机推荐