Docker:如何连接两个桥接网络

12

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

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

现在我有一个在桥接A上的container1,和一个名为"mailServer"且在桥接B上的container2。

container1需要通过DNS访问container2,我应该怎么做呢?因为它们位于不同的桥接上,所以它们无法相互通信。我需要一个路由器吗?并且我能否通过Docker实现此功能呢?

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

4个回答

14

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

$ docker network connect bridgeB container1

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

更多信息请参阅Docker网络指南这里


1
有更语义化的方式连接两个自定义桥接网络吗?“docker network connect NETWORK1 NETWORK2”不被支持。连接两个自定义桥接网络是个坏主意吗(可能是坏主意,因为它不被支持)?为什么? - Sida Zhou

13

您可以尝试使用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不在同一个子网中,则连接是无用的。 - focus zheng

0
如果您想连接两个桥接器,可以使用一对带有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

0

在过滤表中设置前向链,允许 Bridge-A 和 Bridge-B 转发。如果您想要访问互联网,在 NAT 表的 Postrouting 链中设置 masquerade。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接