我有一个在VPC中运行的ECS托管EC2实例(在一个私有子网中)。当尝试在此实例上运行任务时,它似乎无法提取图像。据我所知,从文档中可以看出,ECS代理无需从repo中提取图像。
查看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 AMIs都发生了这个错误
是否需要应用任何特定的配置或网络规则才能从ECR中提取?
非常感谢任何帮助。
作为旁注,该实例可以访问互联网(ping google.com工作正常),当我尝试从Docker Hub中提取图像时,它也可以正常工作。
答案 0 :(得分:1)
要从ECR下载映像,容器实例需要访问ECR / S3端点。
如果您的子网是私有的,则必须使用PrivateLink功能或必须使用NAT网关才能到达ECR端点。
如果您选择使用PrivateLink,则包括:
如果选择使用NatGateway,请将所有流量路由到NATGateway并将白名单AWS IP范围列入白名单。
参考链接:https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html