Amazon ECS 中的 CannotPullContainer 任务错误 - Amazon Elastic Container Service

Amazon ECS 中的 CannotPullContainer 任务错误

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

注意

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

任务无法拉取映像。请检查该角色是否具有从注册表中拉取映像的权限。

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

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

  1. 检查 irepository 中是否存在该映像。有关查看映像的信息,请参阅《Amazon Elastic Container Registry 用户指南》中的 Viewing image details in Amazon ECR

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

    有关如何查看和修改角色的信息,请参阅《AWS Identity and Access Management 使用指南》中的修改角色

    该任务会使用以下角色之一:

任务无法从 Amazon ECR 存储库“存储库 URI”中提取“image-name”。任务与 Amazon ECR 之间存在连接问题。请检查任务网络配置。

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

有关如何验证和解决问题的信息,请参阅 验证 Amazon ECS 已停止任务连接

任务无法拉取映像。检查网络配置

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

有关如何验证和解决问题的信息,请参阅 验证 Amazon ECS 已停止任务连接

API 错误(500):获取 https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/:net/http:在等待连接期间请求被取消

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

要解决此问题,您可以:

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

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

API 错误

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

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

写入 /var/lib/docker/tmp/GetImageBlob111111111:设备上空间不足

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

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

如果使用的是经 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,这将释放容器实例上原本用于容器日志的磁盘空间。有关更多信息,请参阅 将 Amazon ECS 日志发送到 CloudWatch

ERROR:toomanyrequests:请求太多或您已达到拉取速率限制。

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

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

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

如果您提高了 Docker Hub 速率限制,且需要对容器实例的 Docker 拉取进行身份验证,请参阅容器实例的私有注册表身份验证

来自进程守护程序的错误响应:获取 url:net/http:在等待连接期间请求被取消

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

要解决此问题,您可以:

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

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

ref pull 已重试 1 次:无法复制:httpReaderSeeker:无法打开:意外状态代码

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

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

拉取访问被拒绝

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

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

pull 命令失败:panic:运行时错误:内存地址无效或指针取消引用为零

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

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

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

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

拉取映像配置时出错

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

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

上下文已取消

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

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