我正在运行连接到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命令不显示任何结果。
任何建议都会有很大的帮助。
答案 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)
好的,如果这是用于模型和测试,让我们列出您可能需要检查的操作:
router
设置为在两个虚拟网络之间路由IP数据包。router
创建期间对路线进行硬编码。client
和server
的默认网关不是router
容器,因此您需要手动将路由添加到这些容器,以便知道他们需要通过路由器彼此交谈。client
和server
中手动编辑主机文件。我可能会忘记更多的步骤......