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:如何连接两个网桥的主要内容,如果未能解决你的问题,请参考以下文章