amazon-web-services - ECS 代理无法成功从 ECR 拉取镜像

标签 amazon-web-services docker amazon-ecs

我有一个在 VPC 中运行的 ECS 托管 EC2 实例(在其中一个私有(private)子网中)。尝试在此实例上运行任务时,它似乎无法提取图像。据我从文档中可以看出,ECS 代理不需要特殊配置即可从存储库中提取图像。

查看 Docker 日志,我反复看到以下内容:

level=error msg="Download failed, retrying: dial tcp 54.231.17.81:443: i/o timeout"

ecs-agent 日志反复显示图像未下载:

Pulling image module="TaskEngine" image="REDACTED.dkr.ecr.us-east-1.amazonaws.com/REDACTED:latest" status="Retrying in 19 seconds"

它最终尝试运行图像,但显然失败并退出。在“集群任务”选项卡中向我提供以下消息:

STOPPED (Essential container in task exited)

amzn-ami-2016.03.e 和 amzn-ami-2016.03.d AMI 均出现此错误

是否需要应用任何特定的配置或网络规则才能从 ECR 中提取?

我们将不胜感激。

附带说明,该实例确实可以访问互联网(ping google.com 可以正常工作),当我尝试从 Docker Hub 拉取图像时,它也可以正常工作。

最佳答案

要从 ECR 下载镜像,容器实例需要访问 ECR/S3 端点。

如果您的子网是私有(private)子网,您必须使用 PrivateLink 功能或必须使用 NAT 网关才能访问 ECR 端点。

如果您选择使用 PrivateLink,这包括:

  1. 为 Amazon ECR 创建 VPC 终端节点
  2. 创建 Amazon S3 网关终端节点

如果您选择使用 NatGateway,请将所有流量路由到 NATGateway 并将 AWS IP 范围列入白名单。

引用链接:https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html

关于amazon-web-services - ECS 代理无法成功从 ECR 拉取镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38376413/

相关文章:

amazon-web-services - AWS Cloudformation - 挂载到现有文件系统

amazon-web-services - 用于从队列中插入和删除的 SQS 日志记录

amazon-web-services - txt 中的 AWS EC2 pem key

docker - 有关Cloudant本地Docker中的Compactor的内部错误

bash - 强制在Docker镜像中更改时区

amazon-web-services - 如何将ELB的80和443端口映射到同一个ECS容器?

amazon-web-services - 如何将Amazon ECS添加到我已经创建的非默认VPC中?

android - AWS/Android 无法计算 md5 哈希

django/apache 无法在 Docker 容器中提供网页。错误 - ModuleNotFoundError : No module named 'django'

amazon-web-services - 如何使用 terraform 运行 ECS 任务?