【问题标题】:Docker: how to connect two bridgesDocker:如何连接两个网桥
【发布时间】:2016-08-01 08:44:27
【问题描述】:

如您所知,在 Docker 1.9 之后,我们可以创建桥接器来连接容器。

我创建了两个自定义网桥:网桥 A 172.18.0.1 和网桥 B 172.19.0.1

现在我在网桥 A 上有一个 container1,在网桥 B 上有一个 container2,称为“mailServer”。

container1 需要通过 DNS 到达 container2,我该怎么做?因为他们在不同的桥上,所以他们不能互相交谈。我需要路由器吗?我可以通过 Docker 来实现吗?

这是 Docker 的一个新特性,我没有找到太多资料。谢谢。

【问题讨论】:

    标签: networking docker bridge


    【解决方案1】:

    您可以尝试使用 veth 对等体,以便连接两个网桥。确保您分别使用您配置的重命名和命名。

    ip link add veth0 type veth peer name veth1
    ifconfig veth0 up
    ifconfig veth1 up
    brctl addif <D1-A-Bridge> veth0
    brctl addif <D2-A-Bridge> veth1
    

    【讨论】:

    • 如果网桥 A 和网桥 B 不在同一个子网中。连接无效。
    【解决方案2】:

    如果你想连接两个网桥,你可以使用一对 使用 open v-switch 修补端口。以下示例创建网桥 br0 和 br1,将 eth0 和 tap0 添加到 br0,将 tap1 添加到 br1,然后使用一对补丁端口连接 br0 和 br1。

       ovs-vsctl add-br br0
       ovs-vsctl add-port br0 eth0
       ovs-vsctl add-port br0 tap0
       ovs-vsctl add-br br1
       ovs-vsctl add-port br1 tap1
       ovs-vsctl \
           -- add-port br0 patch0 \
           -- set interface patch0 type=patch options:peer=patch1 \
           -- add-port br1 patch1 \
           -- set interface patch1 type=patch options:peer=patch0
    

    【讨论】:

      【解决方案3】:

      要将 container2 连接到 container1,您也可以将它连接到 bridgeB

      $ docker network connect bridgeB container1
      

      这将允许 container1 通过 IP 地址连接到 container2,DNS 名称仍然需要手动更新。

      Docker 网络指南here 中的更多信息。

      【讨论】:

      • 有没有更语义化的方式来连接两个自定义桥接网络?不支持docker network connect NETWORK1 NETWORK2。连接两个自定义桥接网络是个坏主意(可能是个坏主意,因为它不受支持)?为什么?
      【解决方案4】:

      在过滤表中设置转发链,允许Bridge-A和Bridge-B转发。如果要访问互联网,请在nat表的Postrouting链中设置masqurade

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 2015-11-01
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多