如何解决 Fargate 上 Amazon ECS 任务的“cannotpullcontainererror”错误?

上次更新时间:2020 年 11 月 3 日

我想解决“cannotpullcontainererror”错误,以便我可以在 AWS Fargate 上启动 Amazon Elastic Container Service (Amazon ECS) 任务。

简短描述

“cannotpullcontainererror”错误可能会导致任务无法启动。要在 Fargate 上启动 Amazon ECS 任务,您的 Amazon Virtual Private Cloud (Amazon VPC) 联网配置必须允许您的 Amazon ECS 基础设施访问存储映像的存储库。如果联网配置不正确,Amazon ECS 将无法在 Fargate 上提取映像,容器也无法启动。

解决方法

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

与在其中创建任务的子网关联的路由表必须允许您的 Amazon ECS 基础设施通过互联网网关、NAT 网关或 VPC 终端节点访问存储库终端节点。

如果您不使用 AWS PrivateLink,请完成以下步骤:

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中,选择 Subnets(子网)。
  3. 选择您的 ECS Fargate 任务所使用的子网。
  4. 选择 Route Table(路由表)选项卡。
  5. Destination(目标)列中,确认路由表的默认路由 (0.0.0.0/0) 允许从公共互联网访问。此访问可以通过 NAT 网关或互联网网关进行。
    重要提示:此 NAT 网关或互联网网关必须是默认路由的目标。对于示例路由表,请参阅示例路由选项。如果您不使用 NAT 网关或互联网网关,请确保您的自定义配置允许公共互联网访问。

如果您使用某个互联网网关(公有子网),请确认已为该任务分配了一个公有 IP。为此,请启动您的 ECS 任务,并在创建任务或服务时将 VPC and security groups(VPC 和安全组)部分的 Auto-assign public IP(自动分配公有 IP)设置为 ENABLED(已启用)。

如果您使用 PrivateLink,请确认您 VPC 终端节点的安全组允许 Fargate 基础设施使用它们。

注意:仅使用 Fargate 启动类型和平台版本 1.3.0 或更早版本的 Amazon ECS 任务才需要使用适用于 Amazon Elastic Container Registry (Amazon ECR) 的 com.amazonaws.region.ecr.dkr VPC 终端节点和 Amazon Simple Storage Service (Amazon S3) 网关终端节点。

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中,选择 Endpoints(终端节点)。
  3. 从终端阶段列表中选择终端节点,然后选择 Subnets(子网)选项卡。适用于 Amazon ECR 的 com.amazonaws.region.ecr.dkrcom.amazonaws.region.ecr.api VPC 终端节点应会子网列表中显示,并且与 Fargate 子网关联。此外,您还应会子网列表中看到 Amazon S3 网关。
    注意:如果没有列出任何子网,请选择 Manage Subnets(管理子网)。然后根据子网的 Availability Zone(可用区)选择子网,然后再选择 Modify Subnets(修改子网)。
  4. 选择 Policy(策略)选项卡,然后确认已满足有关正确策略的要求
  5. 要确认附加到 com.amazonaws.region.ecr.apicom.amazonaws.region.ecr.dkr VPC 终端节点的安全组允许通过端口 443 传入来自适用于 Fargate 的 Amazon ECS 任务的连接,请从终端节点列表中选择终端节点。
  6. 选择 Security Groups(安全组)选项卡。
  7. 对于 Group ID(组 ID),选择安全组的 ID。
  8. 选择 Inbound rules(入站规则)选项卡,然后确认您可以看到允许从适用于 Fargate 的 Amazon ECS 任务发起 443 连接的规则。

检查 VPC DHCP 选项集

  1. 打开 Amazon VPC 控制台
  2. 从导航窗格中选择 Your VPCs(您的 VPC)。
  3. 选择包含您的 Fargate 任务的 VPC。
  4. Details(详细信息)选项卡上,记下 DHCP options set(DHCP 选项集)的设置。
  5. 在导航窗格中,选择 DHCP Options Sets(DHCP 选项集)。
  6. 选择您在第 4 步中记下的 DHCP 选项集。
  7. 选择 Actions(操作),然后选择 View details(查看详细信息)。
  8. 确认已将 Domain name servers(域名服务器)设置为 AmazonProvidedDNS(Amazon 提供的 DNS)。如果未将其设置为 AmazonProvidedDNS(Amazon 提供的 DNS),则配置条件 DNS 转发

检查任务执行角色权限

  1. 打开 IAM 控制台
  2. 在导航窗格中,选择Roles(角色)。
  3. 选择您的 Fargate 任务正在使用的任务执行角色。
  4. 确认任务执行角色具有从 Amazon ECR 中提取映像的权限

检查映像是否存在

  1. 打开 Amazon ECR 控制台
  2. 选择您的 Fargate 任务应从中提取映像的 Amazon ECR 存储库。
  3. 确认 Amazon ECR 中的 URI 和标签与任务定义中指定的内容相同。

注意:如果您不使用 Amazon ECR,请确保您在指定的映像存储库中看到 image:tag。</p


这篇文章对您有帮助吗?


您是否需要账单或技术支持?