两个容器之间的通信使用另一个容器
我正在运行连接到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,让我们列出你可能需要检查的动作:
- 您需要确保
router
设置为在两个虚拟networking之间路由IP数据包。 - 在networking创build过程中,您需要对IP子网进行硬编码。
- 您需要在
router
创build过程中硬编码路由。 - 由于
client
和server
的默认网关不是router
容器,因此您需要手动向这些容器添加路由,以了解他们需要通过路由器进行对话。 - 如果您想按名称解决这些问题,您需要在
client
和server
上手动编辑主机文件。 - 您需要手动确定每个容器的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
- 覆盖dockernetworking中的–link和–alias之间的区别?
- Docker-compose容器使用主机DNS服务器
- 将phpMyAdmin docker镜像连接到仅在127.0.0.1上侦听的HOST MySQL服务器
- 是否有可能从外部互联网隔离用户定义的覆盖networking中的docker集装箱?
- 如何在两个不同的主机上运行两个docker集装箱之间的通信?
- 如何将Docker机器暴露给内部networking
- 在运行Docker for Mac时访问本地networking上的设备
- Docker 1.9覆盖networking – 从主机访问
- Docker撰写 – 构build过程中错误的主机名