Aus*_*n K 15 amazon-web-services amazon-ecs docker aws-fargate
我在Amazon Fargate集群上运行任务时遇到此错误.有没有人见过这个?提前致谢.
转到文档以获取对此答案。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_cannot_pull_image.html
由于您遇到500错误,因此我会留意第一个错误的描述“连接超时”的建议:
启动Fargate任务时,其弹性网络接口需要一条通往Internet的路由来提取容器图像。如果在启动任务时收到与以下类似的错误,那是因为不存在到Internet的路由:
Run Code Online (Sandbox Code Playgroud)CannotPullContainerError: API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection要解决此问题,您可以:
对于公共子网中的任务,在启动任务时为自动分配公共IP指定启用 ...
对于专用子网中的任务,在启动任务时为自动分配公用IP指定禁用,并在VPC中配置NAT网关以将请求路由到Internet。
如果您遇到其他与ECS任务没有启动有关的问题,或者启动时表现出奇怪的行为,请查看ECS故障排除主题的完整列表。
我遇到了类似的错误(404而不是500),但是,即使详细状态列出了错误,任务也显示它正在运行。
事实证明,ecs-tasks无法承担与任务关联的角色(在这种情况下,角色与其运行的EC2实例相同)。在角色中添加以下信任关系语句可解决此问题:
{
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参见任务执行角色上的特定页面。
公共 IP不是强制性的,缺乏创建工作 NAT 网关的规范。在GitHub 问题上,亚马逊技术人员不断重复您“只”需要私有 IP + NAT,但事实并非如此。我与这个自己奋斗了很多,但终于得到了它正常工作,而无需使用公共IP为我Fargate服务。
要让 Fargate 服务在没有公共 IP 的情况下访问互联网,您需要设置一个具有 2 个子网的 VPC:
您可以通过两种方式创建这样一个VPC:前往Services> VPC> VPC Dashboard,点击Launch VPC Wizard和选择"VPC with Public and Private Subnets"; 或手动:
注意:以下所有步骤都在Services>VPC
Your VPCs和Create a VPCSubnets和Create subnet2次
private 子网
public 子网
Internet Gateways和Create internet gateway
Internet Gateway, Actions,Attach to VPC并将其附加到焦点 VPCNAT Gateways和Create NAT Gateway
public子网Create New EIP 或者使用现有的,因为你有一个AvailableRoute Tables和Create route table2次
private 路由表
Routes 底部的标签, Edit routesAdd route, 目的地: 0.0.0.0/0, 目标是之前创建的 NAT 网关和Save routesActions并且Set Main Route Table(如果还没有)public 路由表
Routes 底部的标签, Edit routesAdd route, 目标: 0.0.0.0/0, 目标是之前创建的 Internet 网关和Save routesSubnet Associations 底部的标签, Edit subnet associationspublic子网,Save您放置在public子网中的每个服务都将具有双向Internet 访问权限,您放置在private子网中的每个服务都只能访问传出Internet(是的,private没有公共 IP的子网中的 Fargate 和 EC2 服务将具有 Internet 访问权限)。
| 归档时间: |
|
| 查看次数: |
5319 次 |
| 最近记录: |