我有
ECS
,它使用 EC2
,并且 EC2
有一个 container
。
从
EC2 node
我可以使用此命令访问外部。
[ec2-user@ip-172-31-23-50 ~]$ curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
然后我登录在该节点上运行的容器,
docker exec -it container-name /bin/bash
root@ip-172-31-24-234:/# curl google.com
我无法访问(什么也没有出现)。
所以,我检查了
ECS Service
的安全组。
但是允许所有出站连接
测试
在EC2节点上,我尝试运行另一个容器(因为我想测试不受ECS服务管理的容器)。
docker run -it ubuntu
然后
install curl
并在这个curl
容器中尝试ubuntu
,我可以从容器连接到外部。
所以问题只发生在 ECS 托管容器中,
我的任务定义是
CDK
做的,也许这个网络模式有关....??
const adminTaskDefinition = new ecs.Ec2TaskDefinition(this, 'AdminTaskDefinition', {
networkMode: ecs.NetworkMode.AWS_VPC,
})
也许在任务定义中设置网络模式 = 主机。