Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
如何解决 Fargate 上 Amazon ECS 任务的"cannotpullcontainererror"错误?
我想解决"cannotpullcontainererror"错误,以便能够在 AWS Fargate 上启动我的 Amazon Elastic Container Service (Amazon ECS) 任务。
简短描述
"cannotpullcontainererror"错误可能会导致您在 Fargate 上的 Amazon ECS 任务无法启动。对于这些任务,您的 Amazon Virtual Private Cloud (Amazon VPC) 网络配置必须允许 ECS 访问存储映像的存储库。如果网络配置不正确,Fargate 上的 Amazon ECS 将无法拉取映像,容器也无法启动。
解决方法
要解决"cannotpullcontainererror"错误,请完成以下任务。
确认您的 VPC 允许您的 Amazon ECS 基础设施访问映像存储库
与用于创建任务的子网关联的路由表必须允许您的 Amazon ECS 基础设施访问存储库端点。该端点可通过互联网网关、NAT 网关或 VPC 端点访问。
对于不使用 AWS PrivateLink 的配置,请完成以下步骤:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Subnets(子网)。
- 选择您的 ECS Fargate 任务当前使用的子网。
- 选择 Route Table(路由表)选项卡。
- 在 Destination(目标)列中,确认路由表的默认路由 (0.0.0.0/0) 允许公共互联网访问。该访问可通过 NAT 网关或互联网网关实现。
**重要事项:**NAT 网关或互联网网关必须是默认路由的目标。有关示例路由表,请参阅示例路由选项。如果您不使用 NAT 网关或互联网网关,请确保您的自定义配置允许公共互联网访问。
如果您使用互联网网关(公共子网),请确认任务已分配了公有 IP。创建任务或服务时,在 VPC and security groups(VPC 和安全组)部分下,将 Auto-assign public IP(自动分配公有 IP)设置为 Enabled(启用)。
对于使用 PrivateLink 的配置,请确认您的 VPC 端点的安全组允许 Fargate 基础设施使用这些配置。
**注意:**托管在 Fargate 上且使用 1.3.0 或更早版本的 Amazon ECS 任务需要 com.amazonaws.region.ecr.dkr Amazon Elastic Container Registry (Amazon ECR) VPC 端点。这些任务还需要 Amazon Simple Storage Service (Amazon S3) 网关端点。托管在 Fargate 上且使用 1.4.0 或更高版本的 Amazon ECS 任务需要 com.amazonaws.region.ecr.dkr 和 com.amazonaws.region.ecr.api Amazon ECR VPC 端点。这些任务还需要 Amazon S3 网关端点。
对于使用 PrivateLink 的配置,请完成以下步骤:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Endpoints(端点)。
- 从端点列表中选择端点,然后选择 Subnets(子网)选项卡。Amazon ECR 的 VPC 端点 com.amazonaws.region.ecr.dkr 和 com.amazonaws.region.ecr.api 会显示在子网列表中,且与 Fargate 子网相关联。Amazon S3 网关也会显示在子网列表中。
注意:如果某个子网未列出,请选择 Manage Subnets(管理子网)。接下来,根据子网可用区选择子网。然后,选择 Modify Subnets(修改子网)。 - 选择 Policy(策略)选项卡,然后确认已满足正确的策略要求。
- 确认附加到 com.amazonaws.region.ecr.api 和 com.amazonaws.region.ecr.dkr VPC 端点的安全组允许端口 443 上来自 Fargate 上 Amazon ECS 任务的入站连接。要确认此设置,请从列表中选择该端点。
- 选择 Security Groups(安全组)选项卡。
- 对于 Group ID(组 ID),选择安全组 ID。
- 选择 Inbound rules(入站规则)选项卡,然后确认您可以看到允许来自 Fargate 上 ECS 任务的 443 连接的规则。
检查 VPC DHCP 选项集
完成以下步骤:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Your VPCs(您的 VPC)。
- 选择包含您的 Fargate 任务的 VPC。
- 在 Details(详细信息)选项卡上,记下 DHCP 选项集的设置。
- 在导航窗格中,选择 DHCP Options Sets(DHCP 选项集)。
- 选择您记下的 DHCP 选项集。
- 选择 Actions(操作),然后选择 View details(查看详细信息)。
- 确认 Domain name servers(域名服务器)已设置为 AmazonProvidedDNS。如果未设置为 AmazonProvidedDNS,请配置条件 DNS 转发。
检查任务执行角色权限
完成以下步骤:
- 打开 AWS Identity and Access Management (IAM) 控制台。
- 在导航窗格中,选择 Roles(角色)。
- 选择您的 Fargate 任务当前使用的任务执行角色。
- 确认该任务执行角色具有从 Amazon ECR 拉取映像的权限。
检查映像是否存在
完成以下步骤:
- 打开 Amazon ECR 控制台。
- 选择您的 Fargate 任务从中拉取映像的 Amazon ECR 存储库。
- 确认 Amazon ECR 中的 URI 和标签与任务定义中指定的是否相同。如果映像缺失,请检查是否有生命周期策略管理这些映像。
**注意:**如果您不使用 Amazon ECR,请确保在指定的映像存储库中能看到 image:tag。
检查分配给 Fargate 任务的临时存储
默认情况下,会为 Fargate 任务分配 20GiB 的临时存储。如果您的映像过大,则您会看到类似于以下内容的错误:
"CannotPullContainerError: ref pull has been retried 1 time(s): failed to extract layer no space left on device: unknown"
**注意:**由于此存储还用于临时文件、日志和其他进程,因此即使映像较小,您也可能会收到此错误。
要解决此问题,请在任务定义中编辑分配。有关详细信息,请参阅适用于 Amazon ECS 的 Fargate 临时存储
**注意:**使用平台版本 1.4.0 或更高版本的 Fargate 任务会获得至少 20 GiB 的临时存储。临时存储的总容量可增加到最大 200 GiB。
- 语言
- 中文 (简体)
