Amazon ECS 中的 CannotPullContainer 任务错误 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon ECS 中的 CannotPullContainer 任务错误

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

注意

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

API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection

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

要解决此问题,您可以:

  • 对于在公有共子网中的任务,在启动任务时为自动分配公有 IP 指定启用。有关更多信息,请参阅 将应用程序作为 Amazon ECS 任务运行

  • 对于在私有子网中的任务,在启动任务时为自动分配公有 IP 指定禁用,然后在 VPC 中配置 NAT 网关,将请求路由到互联网。有关更多信息,请参阅 Amazon VPC 用户指南中的 NAT 网关

API error (404): repository 111122223333.dkr.ecr.us-east-1.amazonaws.com/<repo>/<image> not found

这意味着无法找到容器映像或存储库。

在容器定义中指定一个 Amazon ECR 映像时,必须使用 Amazon ECR 存储库的完 URI 连同该映像在该存储库中的名称。

要解决此问题,请验证存储库的 URI 和镜像名称。确保您的任务定义具有任务执行 IAM 角色。有关任务执行角色的更多信息,请参阅Amazon ECS 任务执行 IAM 角色

API error

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

有关如何解决此问题的信息,请参阅 Amazon Web Services Support 网站上的如何解决 Amazon ECS 中的 Amazon ECR 错误“CannotPullContainerError:API 错误”

write /var/lib/docker/tmp/GetImageBlob111111111: no space left on device

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

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

如果使用的是经 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 文档中的配置日志记录驱动程序

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

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

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

ERROR: toomanyrequests: Too Many Requests
You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits

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

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

有关 Docker Hub 费率限制的更多信息,请参阅 了解 Docker Hub 速率限制

如果您提高了 Docker Hub 速率限制,且需要对容器实例的 Docker 拉取进行身份验证,请参阅 Amazon Elastic Container Service 开发人员指南中的容器实例的私有注册表身份验证

Error response from daemon: Get url: net/http: request canceled while waiting for connection

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

要解决此问题,您可以:

  • 对于在公有共子网中的任务,在启动任务时为自动分配公有 IP 指定启用。有关更多信息,请参阅 将应用程序作为 Amazon ECS 任务运行

  • 对于在私有子网中的任务,在启动任务时为自动分配公有 IP 指定禁用,然后在 VPC 中配置 NAT 网关,将请求路由到互联网。有关更多信息,请参阅 Amazon VPC 用户指南中的 NAT 网关

ref pull has been retried 1 time(s): failed to copy: httpReaderSeeker: failed open: unexpected status code

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

要解决此问题,请查看以下文章之一:

pull access denied

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

要解决此问题,您可能需要使用 Amazon ECR 对 Docker 客户端进行身份验证。有关更多信息,请参阅《Amazon ECR 用户指南》中的私有注册表身份验证

pull command failed: panic: runtime error: invalid memory address or nil pointer dereference

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

要解决此问题,请执行以下操作:

  • 检查您是否有访问 Amazon S3 的安全组规则。

  • 使用网关端点时,必须在路由表中添加路由才能访问端点。

error pulling image conf/error pulling image configuration

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

要解决此问题,请参阅如何解决我的 Amazon ECS EC2 启动类型任务中的“CannotPullContainerError”错误

Context canceled

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

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

有关 STOPPED 错误的更多信息,请参阅 Amazon Fargate 的 Amazon Elastic Container Service 用户指南中的已停止的任务错误代码