Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services ECS on EC2同一任务中两个容器之间的双向通信_Amazon Web Services_Docker_Networking_Amazon Ec2_Amazon Ecs - Fatal编程技术网

Amazon web services ECS on EC2同一任务中两个容器之间的双向通信

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上部署时,这些容器彼此看不到。在一定程度上,我可以使用任务定义中的链接来解决此问题,但是,它只能在一个方向上工作,我的意思是,如果为两个容器设置链接,我在创建任务定义期间会收到这样的错误

我正在尝试在EC2实例上配置ECS任务。任务定义中的网络模式为桥接

我的任务中有两个容器,它们应该相互通信。e、 g.ContainerA向ContainerB发出请求,ContainerB向ContainerA发出请求

当我使用docker compose时,一切都很好,容器可以通过名称进行通信。但当我在ECS上部署时,这些容器彼此看不到。在一定程度上,我可以使用任务定义中的链接来解决此问题,但是,它只能在一个方向上工作,我的意思是,如果为两个容器设置链接,我在创建任务定义期间会收到这样的错误消息:

无法创建任务定义web app的新修订版:12 容器链接不应具有循环

如果能听到任何想法,我错过了什么,如果真的有可能的话,那就太好了。老实说,我认为一个任务中的容器应该通过容器名称自动通信,特别是当它们位于同一网桥网络下时

我知道有一个特性服务发现,它允许服务之间通过名称进行通信,但我仍然希望有一个服务和任务,其中包含两个容器

谢谢你的帮助


如果两个容器都在同一个任务定义中定义,则可通过
localhost

例如,如果ContainerA正在侦听端口8081,ContainerB正在侦听端口8082,则它们可以通过以下方式相互联系:

localhost:8081
localhost:8082
旁注:与Kubernetes吊舱中的概念相同,带有两个容器-可以通过
localhost

编辑:这与
awsvpc
网络模式相关,您可以在以下页面中看到:

属于同一任务的容器可以通过网络进行通信 本地主机接口


docker compose
默认情况下不使用
网桥,而是使用用户定义的网络。这是通过按服务名称寻址实现的:

默认情况下,Compose为应用程序设置单个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问该容器,并且可以通过与容器名称相同的主机名发现该容器

ECS EC2默认使用链接,Docker不推荐使用这些链接,正如您所发现的,它们不能有循环

不幸的是,AWS不支持用户定义的网络,尽管存在一个长期问题:

到目前为止我都是这么想的。我想剩下的唯一选择是使用
awsvpc
网络模式,它允许容器通过
localhost
进行通信(我觉得这很尴尬):

这意味着任务中的所有容器都可以通过弹性网络接口的IP地址寻址,并且它们可以通过localhost接口相互通信


感谢您的回复。是的,它适用于awsvpc,但不幸的是不适用于桥接模式