我有 ECS 和带负载均衡器的 EC2 实例。互联网网关正在工作。所有这些都在公共子网中工作(我知道这是不对的,但这不是我的问题的重点)。所有这些都是公共的(安全团体等)。传入的请求工作正常。当我尝试从 docker 容器内部发出请求时,收到了请求,但没有得到任何响应。就像响应挂起一样。我可以从 EC2 ping google,但不能从 docker 容器内部 ping 通。 docker 暴露了端口 80。我还应该提到,我无法直接连接到 EC2 公共 IP,但它可以通过负载均衡器工作。
例如:我可以从浏览器连接到 EC2 中的应用程序,但是当我尝试从应用程序内部调用 stripe API 时。 Stripe 注册了更改,但我没有得到响应。
我试图允许一切、无处不在。编辑安全组、ACL、路由表中的规则。
实际状态:
由于您使用的是网络模式
awsvpc
,ECS 任务会从其运行的 EC2 服务器获取单独的弹性网络接口 (ENI)。这意味着 ECS 任务不共享 EC2 实例的任何网络连接,并且它们需要分配给其 ENI 的公共 IP,以便它们能够在部署到的公共子网中使用 Internet 网关路由。
不幸的是,在 EC2 上运行的 ECS 任务不允许您分配公共 IPv4 地址。您的选择是:
host
模式,这将允许您的 ECS 任务使用 EC2 实例的网络连接,该实例分配有公共 IP 地址,因此可以访问 VPC 之外的内容。