Amazon ECS
AWS Fargate 用户指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

无法提取容器映像错误

以下 Docker 错误表明在创建任务时无法检索指定的容器映像。

连接超时

启动 Fargate 任务时,其弹性网络接口需要到 Internet 的路由来提取容器映像。如果您在启动任务时收到一个类似如下的错误,则原因是到 Internet 的路由不存在:

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

要解决此问题,您可以:

未找到映像

在容器定义中指定一个 Amazon ECR 映像时,必须使用 ECR 存储库的完整 ARN 或 URI 连同该映像在该存储库中的名称。如果无法找到存储库或映像,您将收到以下错误:

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

要解决此问题,请验证存储库的 ARN 或 URI 和映像名称。另外,确保您已经使用任务执行 IAM 角色设置了适当的访问权限。有关任务执行角色的更多信息,请参阅Amazon ECS 任务执行 IAM 角色

磁盘空间不足

如果在拉取容器映像时容器实例的根卷没有足够的磁盘空间,您将看到类似以下内容的错误:

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

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

如果您使用的是Amazon ECS-optimized 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
...

在某些情况下,如上面的示例所示,可以由正在运行的容器填充根卷。如果容器使用的是没有 max-size 限制的默认 json-file 日志驱动程序,则可能是日志文件占用了大部分已用空间。您可以使用 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 日志驱动程序