使用另一个容器在两个容器之间进

时间:2017-12-07 03:30:12

标签: linux ubuntu docker networking docker-networking

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

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

用于创建设置的命令:

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

representation of the network topology

我能够从路由器容器ping客户端容器,反之亦然,我也可以从路由器容器ping服务器容器,反之亦然(因为它们属于同一个网络)。 但我无法从客户端容器ping服务器容器,反之亦然。

ping命令不显示任何结果。

任何建议都会有很大的帮助。

2 个答案:

答案 0 :(得分:0)

这是因为您忘记了从client_router添加到服务器的网络连接

 $ 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

答案 1 :(得分:0)

好的,如果这是用于模型和测试,让我们列出您可能需要检查的操作:

  1. 您需要确保router设置为在两个虚拟网络之间路由IP数据包。
  2. 您需要在网络创建期间对IP子网进行硬编码。
  3. 您需要在router创建期间对路线进行硬编码。
  4. 由于clientserver的默认网关不是router容器,因此您需要手动将路由添加到这些容器,以便知道他们需要通过路由器彼此交谈。
  5. 如果要按名称解决主机文件,则需要在clientserver中手动编辑主机文件。
  6. 您需要手动识别每个容器的IP才能使上述DNS正常工作。
  7. 我可能会忘记更多的步骤......