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 平台版本会截断长错误消息。

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

此错误表明由于存在权限问题,任务无法拉取任务定义中指定的映像。错误消息中还包含有关导致问题的映像或角色的额外信息。

"来自进程守护程序的错误响应:repository 拉取访问被拒绝,该存储库不存在或者可能需要“docker 登录”:已拒绝:用户:roleARN 无权在资源:image 上执行:ecr:BatchGetImage 操作,因为没有基于身份的策略允许 ecr:BatchGetImage 操作。"

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

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

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

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

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

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

此错误表明任务无法连接到 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 端点存在连接问题。

有关如何解决此问题的信息,请参阅 Amazon Web Services 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 中提取容器镜像的路径。