Docker:如何连接两个网桥

Posted

技术标签:

【中文标题】Docker:如何连接两个网桥【英文标题】:Docker: how to connect two bridges 【发布时间】: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 的一个新特性,我没有找到太多资料。谢谢。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于Docker:如何连接两个网桥的主要内容,如果未能解决你的问题,请参考以下文章

Docker自定义网桥pipework工作原理

除了默认的docker0网桥,启动Docker服务怎么指定使用的网桥

Docker 自定义网桥

docker之修改docker0网桥默认网段

详解docker桥接网络模型

Docker实例:创建一个点到点连接