【问题标题】:Docker container Network connection between different hostDocker容器不同主机之间的网络连接
【发布时间】:2015-03-08 07:48:52
【问题描述】:

我在两台主机(虚拟机)上安装了 docker。我想让不同主机上的容器能够相互连接。

这是 VM1 和 VM2 的 ifconfig 输出:

虚拟机1

bridge0 : inet addr:172.17.52.1  Bcast:172.17.52.255  Mask:255.255.255.0
docker0 : inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
eth0 : inet addr:192.168.122.129  Bcast:192.168.122.255  Mask:255.255.255.0

虚拟机2

bridge0 : inet addr:172.17.53.1  Bcast:172.17.53.255  Mask:255.255.255.0
docker0 : inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
eth0 : inet addr:192.168.122.77  Bcast:192.168.122.255  Mask:255.255.255.0

bridge 用于容器。我做了一些网络配置:

iptables -t nat -A POSTROUTING -s 172.17.52.0/24 ! -d 172.17.0.0/16 -j MASQUERADE (on VM1)
iptables -t nat -A POSTROUTING -s 172.17.53.0/24 ! -d 172.17.0.0/16 -j MASQUERADE (on VM2)
route add -net 172.17.52.0 netmask 255.255.255.0 gw 192.168.122.129 (on VM2)
route add -net 172.17.53.0 netmask 255.255.255.0 gw 192.168.122.77 (on VM1)

当一个容器 ping 另一个容器时我没有得到任何输出

(172.17.52.X ping 172.17.53.X)

VM1 可以 ping 通 VM2。 VM1上的容器也可以ping通VM2,但是当VM1上的容器ping VM2上的容器时我没有输出。

【问题讨论】:

    标签: networking routing


    【解决方案1】:

    一个非常简单的方法是使用Weave

    你可以安装它:

    sudo wget -O /usr/local/bin/weave \
      https://github.com/zettio/weave/releases/download/latest_release/weave
    sudo chmod a+x /usr/local/bin/weave
    

    虚拟机1

    sudo weave launch
    C=$(sudo weave run 10.2.1.1/24 -t -i busybox)
    

    虚拟机2

    sudo weave launch 192.168.122.129
    C=$(sudo weave run 10.2.1.2/24 -t -i busybox)
    docker exec $C ping -c 3 10.2.1.1/24
    

    您刚刚创建了一个带有容器的虚拟网络。美妙之处在于,这些虚拟机可以在任何地方,只要其中至少有一个具有开放端口 6783 的公共 IP。

    您甚至可以通过运行weave launch -password "<MySecret>" 或(在weave launch 之前导出WEAVE_PASSWORD="<MySecret>")来启用NaCL crypto

    【讨论】:

    • 声明:我是 Weave 团队的一员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多