Docker Bridge0

首先我们使用下面命令查看网络信息:

[vagrant@localhost ~]$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
dce12ad15e67        bridge              bridge              local
be63d9693f78        host                host                local
d1c04eee03c8        none                null                local

今天要讨论的就是Linux的bridge网络。
之前我们使用ip a命令查看宿主机网络接口的时候,返回结果如下:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:5f:94:78 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 76814sec preferred_lft 76814sec
    inet6 fe80::5054:ff:fe5f:9478/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:08:96:2b:f9 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:8ff:fe96:2bf9/64 scope link
       valid_lft forever preferred_lft forever
59: vetha65affd@if58: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether 5a:31:ef:f0:fb:64 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::5831:efff:fef0:fb64/64 scope link
       valid_lft forever preferred_lft forever

其中的veth开头的网络接口就是上一节介绍的veth-pair接口中的其中一个,而另外一个就是容器中的veth网络接口。如当前宿主机中已经启动的容器busybox1的网络接口信息如下:

[vagrant@localhost ~]$ sudo docker exec aec1c356e72c ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
58: eth0@if59: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

其中的eth0端口就是容器与宿主主机中的veth接口组成一对的网络接口,这也是容器可以连接上互联网的原因。而实际上容器也是通过这对veth接口最终连接上了宿主机的docker0端口,为了验证这句话,这里使用brctl工具,这个工具要先安装一下:

sudo yum install bridge-utils

安装以后,执行brctl show命令:

vagrant@localhost ~]$ brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.024208962bf9   no      vetha65affd

上面输出表明宿主机docker0接口和宿主机的vetha65affd接口的关系。
容器和互联网通信的网络如下:


image.png

由上图可知一个linux主机通过eth0接口连接互联网,容器显示连接到docker0,然后通过NAT(network address transtation,网络地址转换),最后通过eth0接口连接互联网。实际上两个容器通过veth-pair连接的过程中也是通过docker0关联的。

深入

之前我们执行sudo docker network ls来查看宿主机网络信息:
[vagrant@localhost ~]$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
dce12ad15e67 bridge bridge local
be63d9693f78 host host local
d1c04eee03c8 none null local
当我们创建一个容器后,容器就会自动连接到bridge网络上。此外,我们可以使用命令,让容器不连接到bridge网络上,而是连接到我们自己创建的网络上,请看下面:

  1. 首先创建一个名为my-bridge网络
sudo docker network create -d bridge my-bridge

结果如下:

[vagrant@localhost ~]$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
dce12ad15e67        bridge              bridge              local
be63d9693f78        host                host                local
ec80468730b6        my-bridge           bridge              local
d1c04eee03c8        none                null                local

我们使用brctl show命令来查看bridge信息,除了docker0这个bridge信息外,还有一个我们新创建的bridge:my-bridge:

[vagrant@localhost ~]$ brctl show
bridge name bridge id       STP enabled interfaces
br-ec80468730b6     8000.02420153f2be   no
docker0     8000.024208962bf9   no      vetha65affd

可以看出新创建的network此时还没有其他容器对其连接。

  1. 创建容器的时候连接到自己创建的bridge
    现在我们新创建一个容器,并将这个容器连接到my-bridge上,而不是默认的docker0上:
docker run -d --name my-busybox --network my-bridge hub.c.163.com/library/busybox:latest /bin/sh -c "while true;do sleep 3600;done"

此时:

[vagrant@localhost ~]$ brctl show
bridge name bridge id       STP enabled interfaces
br-ec80468730b6     8000.02420153f2be   no      veth2f2686c
docker0     8000.024208962bf9   no      vetha65affd

可以看到此时我们新增的network已经有容器的veth网络端口连接上了。
我们也可以使用:

docker network inspect ec80468730b6

命令来查看具体的网络信息,最后一个参数为network id,在返回的json串中有一段:

"Containers": {
            "9189e44ffc8026c63216343126e43dbfec455a212beff342df64c70242c98c9d": {
                "Name": "my-busybox",
                "EndpointID": "1254c2f18629884fdbdcfa2d0cc9f790c1d2de679e9b90417de7e4d4b18873e6",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },

表示连接到这个network的容器信息,可以看到就是我们新创建的容器my-busybox。

3.修改已运行的容器连接到其他的bridge:

docker network connect my-bridge test1

上述命令将正在运行的test1容器网络端口连接到my-bridge。修改连接后,再次执行:

docker network inspect ec80468730b6

结果中Containers部分多了个test1容器的信息。另外,原来test1容器连接的docker0这个bridge网络interface信息中还是保留了连接,即一个容器可以连接到多个bridge上。
还需要注意的是当两个容器连接到了同一个bridge上,则两个容器之间就可以相互ping通。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容