在 Amazon ECS 中如何解决“CannotPullContainerError:守护程序发出错误响应:等待连接时获取 https://registry-name/: net/http: 请求被取消(等待标头时超出 Client.Timeout)”错误?

上次更新时间:2020 年 6 月 10 日

我在 Amazon Elastic Container Service (Amazon ECS) 中启动了一个任务。然后,我收到了以下错误:“CannotPullContainerError:守护程序发出错误响应:等待连接时获取 https://registry-name/: net/http: 请求被取消(等待标头时超出 Client.Timeout)。”

如何解决此错误?

简短描述

当错误配置的网络或间歇性连接导致任务提取映像失败时,您可能会收到此错误。

下面的解决方法包含的步骤用于解决错误配置的网络所导致的错误。

解决方法

根据您的启动类型选择一个解决方法:Amazon Elastic Compute Cloud (Amazon EC2) 或 AWS Fargate。

Amazon EC2 启动类型

  • 如果您的容器实例在私有子网中,请确认子网的路由表中有网络地址转换 (NAT) 网关。
    注意:除了 NAT 网关,您还可以使用 AWS PrivateLinkHTTP 代理。为了避免出现错误,请确保正确配置了 AWS PrivateLink 或 HTTP 代理。
  • 如果您的容器实例在公有子网中,请确认您的实例是否具有公有 IP 地址。您可以编辑子网的公有 IPv4 地址行为以在启动时向容器实例分配公有 IP。
  • 如果您在 Amazon Virtual Private Cloud (Amazon VPC) 中使用 Amazon 提供的 DNS,请确认附加到实例的安全组允许 HTTPS(端口 443)出站访问。
  • 如果您使用自定义 DNS,请确认您允许端口 53 上的 DNS(UDP 和 TCP)和端口 443 上的 HTTPS 出站访问。
  • 验证您的网络访问控制(网络 ACL)规则未阻挡至注册表的流量。

Fargate 启动类型

  • 确认用于运行任务的子网的路由表中具有指向互联网网关或 NAT 网关的路由。
    注意:除了互联网网关或 NAT 网关,您还可以使用 AWS PrivateLink。为了避免出现错误,请确保正确配置了 AWS PrivateLink 或 HTTP 代理。
  • 如果您要在公有子网中启动任务,请在 Amazon EC2 控制台中启动任务时为自动分配公有 IP 选择已启用。这将允许您的任务拥有提取映像所需的出站网络访问权限。
  • 如果您在 Amazon VPC 中使用 Amazon 提供的 DNS,请确认附加到实例的安全组允许 HTTPS(端口 443)出站访问。
  • 如果您使用自定义 DNS,请确认已允许端口 53 上的 DNS(UDP 和 TCP)和端口 443 上的 HTTPS 出站访问。
  • 验证您的网络 ACL 规则未阻挡至注册表的流量。

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?