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

时间:2014-12-25 17:59:29

标签: networking docker ubuntu-14.04

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

像管道工程这样的第三方解决方案建议首先寻找" native"方式。

类似的东西:

enter image description here

当我启动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

2 个答案:

答案 0 :(得分:10)

这是使用新的原生docker网络完成的方式:

使用预定义的子网创建docker networks(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

创建的网络对应于Linux网桥

brctl show

enter image description here

创建点击界面

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

并将他们加入桥梁

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

将容器连接到网络

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

验证每个容器是否已连接到其网络

docker network inspect net1

enter image description here

docker network inspect net2

enter image description here

docker network inspect net3

enter image description here

已连接的容器从其相应的网络子网获取其IP

docker exec c1 ip a s eth1

enter image description here

docker exec c2 ip a s eth1

enter image description here

docker exec c3 ip a s eth1

enter image description here

从网络断开容器

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

删除网络

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

答案 1 :(得分:1)

您可以创建custom bridges,然后使用选项-b <BRIDGE>--bridge=<BRIDGE>运行每个容器,但我没有尝试过,我不会绝对确定这种方法是否有效任何问题。如果您阅读this Docker问题,我认为建议不可能这样。

但是如that问题所述,您可以停用任何泊坞网络管理(使用选项--net=none运行容器,然后使用pipework按照您的意愿组织网络。< / p>

最后,你可以看看zettio/weave。使用它可以轻松运行您希望的网络中的每个容器,如果您想将docker环境从一台机器扩展到各种机器(如docker swarm那样),它还为您提供了很多可能性。