Amazon ECS 中的 CannotPullContainer 任务错误
以下错误表明任务无法启动,因为 Amazon ECS 无法检索指定的容器映像。
注意
1.4 Fargate 平台版本会截断长错误消息。
要使用 AWS Management Console 检查已停止的任务是否有错误消息,请参阅 查看 Amazon ECS 已停止任务错误。
任务无法拉取映像。请检查该角色是否具有从注册表中拉取映像的权限。
此错误表明由于存在权限问题,任务无法拉取任务定义中指定的映像。
要解决此问题,请执行以下操作:
-
检查
repository
中是否存在该映像。有关查看映像的信息,请参阅《Amazon Elastic Container Registry 用户指南》中的 Viewing image details in Amazon ECR。 -
验证
role-arn
是否具有拉取映像的适当权限。有关如何更新角色的信息,请参阅《AWS Identity and Access Management 用户指南》中的更新角色权限。
该任务会使用以下角色之一:
-
对于使用 Fargate 启动类型的任务,该任务将使用任务执行角色。有关其他 Amazon ECR 权限的信息,请参阅 Fargate 任务通过接口端点拉取 Amazon ECR 映像的权限。
-
对于使用 EC2 启动类型的任务,该任务将使用容器实例角色。有关其他 Amazon ECR 权限的信息,请参阅 Amazon ECR 权限。
-
任务无法从 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 端点存在连接问题。
有关如何解决此问题的信息,请参阅 支持 网站上的如何解决 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 文档中的 JSON File logging driver
下面的容器定义代码段说明此选项的用法:
{ "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:无法打开:意外状态代码
此错误表明复制映像时发生故障。
要解决此问题,请查看以下文章之一:
-
有关 Fargate 任务,请参阅 如何解决 Fargate 上 Amazon ECS 任务的 "cannotpullcontainererror" 错误
。 -
有关其他任务,请参阅如何解决 Amazon ECS 任务的 "cannotpullcontainererror" 错误
。
拉取访问被拒绝
此错误表明无法访问映像。
要解决此问题,您可能需要使用 Amazon ECR 对 Docker 客户端进行身份验证。有关更多信息,请参阅《Amazon ECR 用户指南》中的私有注册表身份验证。
pull 命令失败:panic:运行时错误:内存地址无效或指针取消引用为零
此错误表明由于内存地址无效或空指针取消引用而无法访问映像。
要解决此问题,请执行以下操作:
-
检查您是否有访问 Amazon S3 的安全组规则。
-
使用网关端点时,必须在路由表中添加路由才能访问端点。
拉取映像配置时出错
此错误表明已达到速率限制或存在网络错误:
要解决此问题,请参阅如何解决我的 Amazon ECS EC2 启动类型任务中的“CannotPullContainerError”错误
上下文已取消
此错误表明上下文已取消。
此错误的常见原因是,您的任务使用的 VPC 没有从 Amazon ECR 中提取容器镜像的路径。