Docker: 如何连接两个网桥

Docker: how to connect two bridges

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

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

现在我在桥 A 上有一个容器 1,在桥 B 上有一个名为 "mailServer" 的容器 2。

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

这是Docker的新功能,我没有找到太多信息。谢谢

您可以尝试使用veth peer 连接两个网桥。确保您分别使用您配置的重命名和名称。

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

如果你想连接两个网桥,你可以使用一对 使用打开的 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

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

$ docker network connect bridgeB container1

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

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

在过滤器table中设置Forward链,允许Bridge-A和Bridge-Bforward.if你想上网,在nat的Postrouting链中设置伪装table