【问题标题】:communication between two containers using another container使用另一个容器的两个容器之间的通信
【发布时间】:2018-05-21 02:13:37
【问题描述】:

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

我需要这种网络拓扑,其中服务器和客户端属于不同的 docker 网络,并且路由器能够连接服务器和客户端容器(可以路由服务器和客户端流量的实际路由器)。这是网络模拟所必需的,我在 docker 容器而不是实际计算机上运行模拟。 (使用的网络模拟器是 TCP Experiment Automation Controlled Using Python (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 命令不显示任何结果。

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

【问题讨论】:

    标签: linux ubuntu docker networking docker-networking


    【解决方案1】:

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

    1. 您需要确保 router 已设置为在两个虚拟网络之间路由 IP 数据包。
    2. 您需要在网络创建期间对 IP 子网进行硬编码。
    3. 您需要在 router 创建期间对路由进行硬编码。
    4. 因为clientserver 的默认网关不是router 容器,您需要手动向这些容器添加路由才能知道它们需要通过路由器才能相互通信。
    5. 如果要按名称寻址,则需要手动编辑 clientserver 中的主机文件。
    6. 您需要手动识别每个容器的 IP 才能使上述 DNS 正常工作。

    我可能忘记了更多步骤......

    【讨论】:

    • 我将网关 ip 添加到路由器两端(服务器和客户端)的接口,它解决了我的问题。谢谢!
    • @sharath 您能否详细介绍一下您的解决方案,因为我刚刚遇到了同样的问题。
    【解决方案2】:

    这是因为你忘记添加从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
    

    【讨论】:

    • 通过添加该行,您将在服务器和 client_router 之间创建链接。在这里,我正在寻找通过路由器容器与服务器和客户端进行通信。
    • 天啊!您期望路由器 Docker 的行为类似于真正的路由器吗?然后你需要带 vrouter 而不是简单的 ubuntu 机器并且表现得像路由器;它的名字你已经给了,不要指望 ubunut docker 的行为会像 vrouter 一样 :)
    • 我能做些什么来完成这项工作:D。更改路由器的默认网关并更改路由器容器内的 iptable 规则会完成这项工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多