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
-
此错误表明复制映像时发生故障。
要解决此问题,请查看以下文章之一:
-
有关 Fargate 任务,请参阅 如何解决 Fargate 上 Amazon ECS 任务的 "cannotpullcontainererror" 错误
。 -
有关其他任务,请参阅如何解决 Amazon ECS 任务的 "cannotpullcontainererror" 错误
。
-
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 用户指南中的已停止的任务错误代码。