两个容器之间的通信使用另一个容器

我正在运行连接到server_routernetworking(桥networking驱动程序)和连接到client_routernetworking(桥networking驱动程序)的docker客户端容器的docker服务器容器。 路由器容器连接到server_router和client_routernetworking。

我需要这种networking拓扑,其中服务器和客户端属于不同的dockernetworking,路由器能够连接服务器和客户端容器(可以路由服务器和客户端stream量的实际路由器)。 这是networking模拟所需要的,我在Docker容器而不是实际的计算机上运行模拟。 (正在使用的networking模拟器是使用Python控制的TCP实验自动化(TEACUP))。

用于创build设置的命令:

docker network create server_router docker network create client_router docker run -itd --net client_router --name client ubuntu:14.04 docker run -itd --net server_router --name server ubuntu:14.04 docker run -itd --net server_router --name router ubuntu:14.04 docker network connect client_router router docker network inspect client_router docker network inspect server_router 

networking拓扑的表示

我能够ping路由器容器的客户端容器,反之亦然,也能够ping服务器容器从路由器容器,反之亦然(因为他们属于同一networking)。 但是我无法从客户端容器ping服务器容器,反之亦然。

ping命令不显示任何结果。

任何build议将是非常有帮助的。

好的,如果这是模型和testing,让我们列出你可能需要检查的动作:

  1. 您需要确保router设置为在两个虚拟networking之间路由IP数据包。
  2. 在networking创build过程中,您需要对IP子网进行硬编码。
  3. 您需要在router创build过程中硬编码路由。
  4. 由于clientserver的默认网关不是router容器,因此您需要手动向这些容器添加路由,以了解他们需要通过路由器进行对话。
  5. 如果您想按名称解决这些问题,您需要在clientserver上手动编辑主机文件。
  6. 您需要手动确定每个容器的IP以供上述DNS工作。

可能更多的步骤,我忘了…

这是因为你忘了添加从client_router到服务器的networking连接

  $ docker network connect client_router server 

我能用下面的命令成功运行。

  $ docker network create server_router $ docker network create client_router $ docker run -itd --net client_router -h client --name client ubuntu:xenial $ docker run -itd --net server_router -h server --name server ubuntu:xenial $ docker run -itd --net server_router -h router --name router ubuntu:xenial $ docker network connect client_router router $ docker network connect client_router server 

然后能够成功地从客户端ping到服务器

  viswesn@viswesn:~$ docker exec -it client bash root@client:/# ping server PING server (172.22.0.3) 56(84) bytes of data. 64 bytes from server.client_router (172.22.0.3): icmp_seq=1 ttl=64 time=0.072 ms 64 bytes from server.client_router (172.22.0.3): icmp_seq=2 ttl=64 time=0.048 ms 64 bytes from server.client_router (172.22.0.3): icmp_seq=3 ttl=64 time=0.052 ms ^C