AWS Fargate - CannotPullContainerError(500)?

时间:2018-01-12 12:43:22

标签: amazon-web-services amazon-ec2 amazon-ecs aws-fargate

我正在使用AWS ECS来托管我的服务。当我尝试使用fargate定义任务时,我遇到了以下问题。

  

CannotPullContainerError:API错误(500):获取https://xxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v2/:net / http:请求在等待连接时被取消(等待标题时超出Client.Timeout)

此外,我还授予IAM用户访问ECR的完全权限。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:11)

看看这里:https://github.com/aws/amazon-ecs-agent/issues/1128

特别是samuelkarp

的评论
  

您在下面看到的错误通常是由于缺少互联网   访问拉图像。图像拉动通过网络发生   Task使用的接口,如此共享安全组和   路由规则。

     

请检查您的配置以了解以下内容:

     

如果您要启动没有公共IP的任务,请确保执行此操作   子网上的路由表有" 0.0.0.0/0"去NAT网关或   NAT实例,以确保访问互联网。如果您的路线表有   一个互联网网关,这就像一个防火墙,并防止   与之建立联系。如果您要与公众一起启动任务   IP,确保子网上的路由表有" 0.0.0.0/0"去   到互联网网关,以确保您将能够使用公共IP   成功进入流量。验证您的安全组规则   任务允许出站访问。此处的默认值通常为All   流量为0.0.0.0/0。如果这些网络更改都不适用   您或如果他们不解决您的问题,请告诉我们,以便我们可以   进一步协助。

答案 1 :(得分:1)

我已经回答了这个here,但是复制粘贴并不会造成伤害。

缺少用于创建有效NAT网关的规范。在GitHub issue,Amazon技术人员会不断重复您“只是”需要私有IP + NAT的事实,但是事实并非如此。我为此进行了很多努力,但最终使它正常工作,而未在我的Fargate服务中使用公共IP。

要使Fargate服务在没有公共IP的情况下访问Internet,您需要设置一个具有2个子网的VPC:

  • 具有Internet网关的公共子网,允许双向互联网访问
  • 具有NAT网关的私有子网,允许仅出局互联网访问

您可以通过两种方式创建这样的VPC:通过转到Services> VPC> VPC Dashboard,单击Launch VPC Wizard并选择"VPC with Public and Private Subnets";或手动:

注意:以下所有步骤均在Services> VPC

中执行
  1. 转到Your VPCsCreate a VPC
  2. 转到SubnetsCreate subnet 2次
    1. private 子网
      1. 将其重点放在VPC上。任何CIDR区块,任何您喜欢的可用区域
    2. public 子网
      1. 将其重点放在VPC上。任何CIDR区块,任何您喜欢的可用区域
  3. 转到Internet GatewaysCreate internet gateway
    1. 随心所欲命名
    2. 选择新创建的Internet GatewayActionsAttach to VPC并将其附加到重点VPC上
  4. 转到NAT GatewaysCreate NAT Gateway
    1. 重要:选择 public 子网
    2. Create New EIP或使用现有的已有的
    3. 等待网关成为Available
  5. 转到Route TablesCreate route table 2次
    1. private 路由表
      1. 将其聚焦到VPC
      2. 回到列表中,选择路由表
      3. 底部的
      4. Routes标签,Edit routes
      5. Add route,目标:0.0.0.0/0,目标是先前创建的NAT网关和Save routes
      6. 仍然选择了路由表 ActionsSet Main Route Table(如果尚未选择)
    2. public 路由表
      1. 将其聚焦到VPC
      2. 回到列表中,选择路由表
      3. 底部的
      4. Routes标签,Edit routes
      5. Add route,目标:0.0.0.0/0,定位到先前创建的Internet网关和Save routes
      6. 底部的
      7. Subnet Associations标签,Edit subnet associations
      8. 选择 public 子网Save
  6. 将黄瓜放在眼睛上

您放置在 public 子网中的每个服务将具有双向互联网访问权限,并且您放置在 private中的每个服务< / strong>子网将仅具有传出互联网访问权限(是的, private 子网中具有公网IP的Fargate和EC2服务将具有互联网访问权限。)