我有一个在 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,这包括:
- 为 Amazon ECR 创建 VPC 终端节点
- 创建 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/