

# Amazon ECS 中的 CannotPullContainer 任务错误
<a name="task_cannot_pull_image"></a>

以下错误表明任务无法启动，因为 Amazon ECS 无法检索指定的容器映像。

**注意**  
1.4 Fargate 平台版本会截断长错误消息。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

**提示**  
您可以将 [Amazon ECS MCP 服务器](ecs-mcp-introduction.md)与人工智能助手结合使用，通过自然语言调查映像拉取错误。

**Topics**
+ [任务无法拉取映像。请检查该角色是否具有从注册表中拉取映像的权限。](#pull-request-image-not-found)
+ [任务无法从 Amazon ECR 存储库“*存储库 URI*”中提取“*image-name*”。任务与 Amazon ECR 之间存在连接问题。请检查任务网络配置。](#pull-image-io-timeout)
+ [任务无法拉取映像。检查网络配置](#pull-request-image-not-found-network)
+ [CannotPullContainerError：拉取映像清单已重试 5 次：无法解析 ref](#pull-request-image-tag)
+ [API 错误（500）：获取 https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/：net/http：在等待连接期间请求被取消](#request-canceled)
+ [API 错误](#pull-request-api-error)
+ [写入 /var/lib/docker/tmp/*GetImageBlob111111111*：设备上空间不足](#pull-request-write-error)
+ [ERROR：toomanyrequests：请求太多或您已达到拉取速率限制。](#container-pull-too-many-requests)
+ [来自进程守护程序的错误响应：获取 *url*：net/http：在等待连接期间请求被取消](#container-pull-request-canceled-connection)
+ [ref pull 已重试 1 次：无法复制：httpReaderSeeker：无法打开：意外状态代码](#container-pull-failed-open)
+ [拉取访问被拒绝](#container-pull-access-denied.title)
+ [pull 命令失败：panic：运行时错误：内存地址无效或指针取消引用为零](#container-pull-runtime-error.title)
+ [拉取映像配置时出错](#container-pull-pulling-image.title)
+ [上下文已取消](#container-pull-context-canceled)

## 任务无法拉取映像。请检查该角色是否具有从注册表中拉取映像的权限。
<a name="pull-request-image-not-found"></a>

此错误表明由于存在权限问题，任务无法拉取任务定义中指定的映像。

要解决此问题，请执行以下操作：

1. 检查 *repository* 中是否存在该映像。有关查看映像的信息，请参阅《Amazon Elastic Container Registry 用户指南》中的 [Viewing image details in Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-info.html)**。

1. 验证 *role-arn* 是否具有拉取映像的适当权限。

   有关如何更新角色的信息，请参阅《AWS Identity and Access Management 用户指南》**中的[更新角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)。

   该任务会使用以下角色之一：
   + 对于使用 Fargate 的任务，这是任务执行角色。有关其他 Amazon ECR 权限的信息，请参阅 [Fargate 任务通过接口端点拉取 Amazon ECR 映像的权限](task_execution_IAM_role.md#task-execution-ecr-conditionkeys)。
   + 对于使用 EC2 的任务，这是容器实例角色。有关其他 Amazon ECR 权限的信息，请参阅 [Amazon ECR 权限](instance_IAM_role.md#container-instance-role-ecr)。

## 任务无法从 Amazon ECR 存储库“*存储库 URI*”中提取“*image-name*”。任务与 Amazon ECR 之间存在连接问题。请检查任务网络配置。
<a name="pull-image-io-timeout"></a>

此错误表明任务无法连接到 Amazon ECR。检查与*存储库 URI* 存储库的连接。

有关如何验证和解决问题的信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## 任务无法拉取映像。检查网络配置
<a name="pull-request-image-not-found-network"></a>

此错误表明任务无法连接到 Amazon ECR。

有关如何验证和解决问题的信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## CannotPullContainerError：拉取映像清单已重试 5 次：无法解析 ref
<a name="pull-request-image-tag"></a>

此错误表明任务无法拉取映像。

要解决此问题，您可以：
+ 验证任务定义中指定的映像是否与存储库中的映像匹配。
+ Amazon ECS 强制映像版本稳定性。如果原始映像不再可用，您将收到此错误。映像标签是强制执行此行为的一部分。将任务定义中的映像从使用 :latest 作为标签更改为特定版本。有关更多信息，请参阅 [容器映像解析](deployment-type-ecs.md#deployment-container-image-stability)。

有关如何验证和解决问题的信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## API 错误（500）：获取 https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/：net/http：在等待连接期间请求被取消
<a name="request-canceled"></a>

此错误表明连接超时，原因是到互联网的路由不存在。

要解决此问题，您可以：
+ 对于在公有共子网中的任务，在启动任务时为**自动分配公有 IP** 指定**启用**。有关更多信息，请参阅 [将应用程序作为 Amazon ECS 任务运行](standalone-task-create.md)。
+ 对于在私有子网中的任务，在启动任务时为**自动分配公有 IP** 指定**禁用**，然后在 VPC 中配置 NAT 网关，将请求路由到互联网。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

## API 错误
<a name="pull-request-api-error"></a>

此错误表明 Amazon ECR 端点存在连接问题。

有关如何解决此问题的信息，请参阅 支持 网站上的[如何解决 Amazon ECS 中的 Amazon ECR 错误“CannotPullContainerError：API 错误”](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-pull-container-api-error-ecr/)。

## 写入 /var/lib/docker/tmp/*GetImageBlob111111111*：设备上空间不足
<a name="pull-request-write-error"></a>

此错误表示磁盘空间不足。

要解决此问题，请释放磁盘空间。

如果使用的是经 Amazon ECS 优化的 AMI，则可以使用以下命令检索文件系统上 20 个最大的文件：

```
du -Sh / | sort -rh | head -20
```

输出示例：

```
5.7G    /var/lib/docker/containers/50501b5f4cbf90b406e0ca60bf4e6d4ec8f773a6c1d2b451ed8e0195418ad0d2
1.2G    /var/log/ecs
594M    /var/lib/docker/devicemapper/mnt/c8e3010e36ce4c089bf286a623699f5233097ca126ebd5a700af023a5127633d/rootfs/data/logs
...
```

在某些情况下，可以由正在运行的容器填充根卷。如果容器使用的是没有 `json-file` 限制的原定设置 `max-size` 日志驱动程序，则可能是日志文件占用了大部分已用空间。您可以使用 `docker ps` 命令通过将上面输出中的目录名称映射到容器 ID 来验证哪个容器占用了空间。例如：

```
CONTAINER ID   IMAGE                            COMMAND             CREATED             STATUS              PORTS                            NAMES
50501b5f4cbf   amazon/amazon-ecs-agent:latest   "/agent"            4 days ago          Up 4 days                                            ecs-agent
```

预设情况下，使用 `json-file` 日志驱动程序时，Docker 会捕获所有容器的标准输出（和标准错误），并使用 JSON 格式将它们写入到文件中。您可以将 `max-size` 设置为日志驱动程序选项，以防日志文件占用过多空间。有关更多信息，请参阅 Docker 文档中的 [JSON File logging driver](https://docs.docker.com/engine/logging/drivers/json-file/)。

下面的容器定义代码段说明此选项的用法：

```
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "256m"
    }
}
```

如果容器日志占用过多磁盘空间，还有一个替代解决方案是使用 `awslogs` 日志驱动程序。`awslogs` 日志驱动程序将日志发送到 CloudWatch，这将释放容器实例上原本用于容器日志的磁盘空间。有关更多信息，请参阅 [将 Amazon ECS 日志发送到 CloudWatch](using_awslogs.md)。

您可能需要更新 Docker 可访问的磁盘大小。

有关更多信息，请参阅 [CannotPullContainerError: no space left on device](https://repost.aws/questions/QUx6Ix1R1SSNisYSs1Sw8EBA/cannotpullcontainererror-no-space-left-on-device)。

## ERROR：toomanyrequests：请求太多或您已达到拉取速率限制。
<a name="container-pull-too-many-requests"></a>

此错误表明有 Docker Hub 速率限制。

如果您收到以下错误之一，则可能达到 Docker Hub 速率限制：

有关 Docker Hub 费率限制的更多信息，请参阅 [了解 Docker Hub 速率限制](https://www.docker.com/increase-rate-limits)。

如果您提高了 Docker Hub 速率限制，且需要对容器实例的 Docker 拉取进行身份验证，请参阅[容器实例的私有注册表身份验证](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth-container-instances.html)。

## 来自进程守护程序的错误响应：获取 *url*：net/http：在等待连接期间请求被取消
<a name="container-pull-request-canceled-connection"></a>

此错误表明连接超时，原因是到互联网的路由不存在。

要解决此问题，您可以：
+ 对于在公有共子网中的任务，在启动任务时为**自动分配公有 IP** 指定**启用**。有关更多信息，请参阅 [将应用程序作为 Amazon ECS 任务运行](standalone-task-create.md)。
+ 对于在私有子网中的任务，在启动任务时为**自动分配公有 IP** 指定**禁用**，然后在 VPC 中配置 NAT 网关，将请求路由到互联网。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

## ref pull 已重试 1 次：无法复制：httpReaderSeeker：无法打开：意外状态代码
<a name="container-pull-failed-open"></a>

此错误表明复制映像时发生故障。

要解决此问题，请查看以下文章之一：
+ 有关 Fargate 任务，请参阅 [如何解决 Fargate 上 Amazon ECS 任务的 "cannotpullcontainererror" 错误](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-fargate-pull-container-error/)。
+ 有关其他任务，请参阅[如何解决 Amazon ECS 任务的 "cannotpullcontainererror" 错误](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-pull-container-error/)。

## 拉取访问被拒绝
<a name="container-pull-access-denied.title"></a>

此错误表明无法访问映像。

要解决此问题，您可能需要使用 Amazon ECR 对 Docker 客户端进行身份验证。有关更多信息，请参阅《Amazon ECR 用户指南》**中的[私有注册表身份验证](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html)。

## pull 命令失败：panic：运行时错误：内存地址无效或指针取消引用为零
<a name="container-pull-runtime-error.title"></a>

此错误表明由于内存地址无效或空指针取消引用而无法访问映像。

要解决此问题，请执行以下操作：
+ 检查您是否有访问 Amazon S3 的安全组规则。
+ 使用网关端点时，必须在路由表中添加路由才能访问端点。

## 拉取映像配置时出错
<a name="container-pull-pulling-image.title"></a>

此错误表明已达到速率限制或存在网络错误：

要解决此问题，请参阅[如何解决我的 Amazon ECS EC2 启动类型任务中的“CannotPullContainerError”错误](https://repost.aws/knowledge-center/ecs-pull-container-error)。

## 上下文已取消
<a name="container-pull-context-canceled"></a>

此错误表明上下文已取消。

此错误的常见原因是，您的任务使用的 VPC 没有从 Amazon ECR 中提取容器映像的路径。