如何将多个Docker连接到单个主机中的不同网桥?

是否有可能将多个Docker(在我的情况下,同一个Docker的多个实例)连接到单个主机中的不同桥?

第三方解决scheme如pipe道build议首先寻找“原生”的方式。

类似的东西:

在这里输入图像说明

当我开始2实例时,第一次使用默认docker0桥,而第二次被指示使用br1(不同的IP范围):

sudo docker run -t -i me/tester:latest /bin/bash sudo docker --bridge=br1 run -t -i me/tester:latest /bin/bash 

导致与Doker0具有相同的IP范围:

 root@2a259a88d9c8:/# ip a ... 73: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 86:d7:cc:c8:b7:e8 brd ff:ff:ff:ff:ff:ff inet 172.17.0.32/16 scope global eth0 

 root@0b849a5398af:/# ip a ... 79: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 26:84:ad:6c:70:6b brd ff:ff:ff:ff:ff:ff inet 172.17.0.34/16 scope global eth0 valid_lft forever preferred_lft forever 

这是如何使用新的本地dockernetworking完成的:

用预定义的子网创builddockernetworking(linux网桥)

 docker network create --subnet=192.168.10.0/24 net1 docker network create --subnet=192.168.20.0/24 net2 docker network create --subnet=192.168.30.0/24 net3 

创build的networking对应于linux网桥

 brctl show 

在这里输入图像说明

创build点击界面

 sudo ip tuntap add dev tap1 mode tap sudo ip tuntap add dev tap2 mode tap sudo ip tuntap add dev tap3 mode tap 

并join他们的桥梁

 sudo brctl addif br-a24f2eb2e054 tap1 sudo brctl addif br-d28c0759c37a tap2 sudo brctl addif br-d9512f62e471 tap3 

开始你的容器

 sudo docker run -itd --name=c1 phusion/baseimage sudo docker run -itd --name=c2 phusion/baseimage sudo docker run -itd --name=c3 phusion/baseimage 

将容器连接到networking

 docker network connect net1 c1 docker network connect net2 c2 docker network connect net3 c3 

validation每个容器是否连接到其networking

 docker network inspect net1 

在这里输入图像说明

 docker network inspect net2 

在这里输入图像说明

 docker network inspect net3 

在这里输入图像说明

连接的容器从他们相应的networking子网中获得他们的IP

 docker exec c1 ip as eth1 

在这里输入图像说明

 docker exec c2 ip as eth1 

在这里输入图像说明

 docker exec c3 ip as eth1 

在这里输入图像说明

断开容器与networking的连接

 docker network disconnect net1 c1 docker network disconnect net2 c2 docker network disconnect net3 c3 

删除networking

 docker network rm net1 docker network rm net2 docker network rm net3 

您可以创build自定义网桥 ,然后使用选项-b <BRIDGE>--bridge=<BRIDGE>运行每个容器,但是我没有尝试这个,我也不能确定这种方法是否可以正常工作。 如果你阅读这个 Docker的问题,我想这个build议是不可能的。

但正如在这个问题上的评论,你可以禁用任何dockernetworkingpipe理(使用选项--net=none运行容器,然后使用pipe道 --net=none组织networking。

最后你可以看看zettio / weave 。 使用它你可以很容易地运行你想要的networking中的每个容器,而且如果你想把docker环境从一个扩展到不同的机器(就像docker swarm一样),它会给你很多的可能性。