Amazon web services ECS on EC2同一任务中两个容器之间的双向通信
我正在尝试在EC2实例上配置ECS任务。任务定义中的网络模式为桥接 我的任务中有两个容器,它们应该相互通信。e、 g.ContainerA向ContainerB发出请求,ContainerB向ContainerA发出请求 当我使用docker compose时,一切都很好,容器可以通过名称进行通信。但当我在ECS上部署时,这些容器彼此看不到。在一定程度上,我可以使用任务定义中的链接来解决此问题,但是,它只能在一个方向上工作,我的意思是,如果为两个容器设置链接,我在创建任务定义期间会收到这样的错误消息: 无法创建任务定义web app的新修订版:12 容器链接不应具有循环 如果能听到任何想法,我错过了什么,如果真的有可能的话,那就太好了。老实说,我认为一个任务中的容器应该通过容器名称自动通信,特别是当它们位于同一网桥网络下时 我知道有一个特性服务发现,它允许服务之间通过名称进行通信,但我仍然希望有一个服务和任务,其中包含两个容器 谢谢你的帮助Amazon web services ECS on EC2同一任务中两个容器之间的双向通信,amazon-web-services,docker,networking,amazon-ec2,amazon-ecs,Amazon Web Services,Docker,Networking,Amazon Ec2,Amazon Ecs,我正在尝试在EC2实例上配置ECS任务。任务定义中的网络模式为桥接 我的任务中有两个容器,它们应该相互通信。e、 g.ContainerA向ContainerB发出请求,ContainerB向ContainerA发出请求 当我使用docker compose时,一切都很好,容器可以通过名称进行通信。但当我在ECS上部署时,这些容器彼此看不到。在一定程度上,我可以使用任务定义中的链接来解决此问题,但是,它只能在一个方向上工作,我的意思是,如果为两个容器设置链接,我在创建任务定义期间会收到这样的错误
如果两个容器都在同一个任务定义中定义,则可通过
localhost
:
例如,如果ContainerA正在侦听端口8081,ContainerB正在侦听端口8082,则它们可以通过以下方式相互联系:
localhost:8081
localhost:8082
旁注:与Kubernetes吊舱中的概念相同,带有两个容器-可以通过localhost
编辑:这与awsvpc
网络模式相关,您可以在以下页面中看到:
属于同一任务的容器可以通过网络进行通信
本地主机接口
docker compose
默认情况下不使用网桥,而是使用用户定义的网络。这是通过按服务名称寻址实现的:
默认情况下,Compose为应用程序设置单个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问该容器,并且可以通过与容器名称相同的主机名发现该容器
ECS EC2默认使用链接,Docker不推荐使用这些链接,正如您所发现的,它们不能有循环
不幸的是,AWS不支持用户定义的网络,尽管存在一个长期问题:
到目前为止我都是这么想的。我想剩下的唯一选择是使用awsvpc
网络模式,它允许容器通过localhost
进行通信(我觉得这很尴尬):
这意味着任务中的所有容器都可以通过弹性网络接口的IP地址寻址,并且它们可以通过localhost接口相互通信
感谢您的回复。是的,它适用于awsvpc,但不幸的是不适用于桥接模式