执行docker network ls可以看到当前docker环境中有三种网络:
[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
第一个是bridge0,这个我们在之前的文章中已经提过了,下面我们将在host和none这两个网络展开讨论。
none network
首先我们运行一个busybox容器,它连接到了none网络。
docker run -d --name test --network none hub.c.163.com/library/busybox:latest /bin/sh -c "while true;do sleep 3600;done"
运行后,我们查看这个容器内部的网络信息:
[vagrant@localhost ~]$ docker exec -it 17b4541a0389 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
发现这个网络只有lo端口,没有之前说的veth端口,另外我们查询docker环境中none这个网络信息:
docker network inspect d1c04eee03c8
结果如下:
"Containers": {
"17b4541a0389a77af67e34a3471c7f594a3d28fe9850b79b45457310e6f99b16": {
"Name": "test",
"EndpointID": "739328fb2e656e967066205c25ca3a5b96db2500478a4b2d16b7296a1a16ded0",
"MacAddress": "",
"IPv4Address": "",
"IPv6Address": ""
}
},
可以看到连接到这个网络的容器的ip地址为空,这就是none网络和bridge网络的差别,连接到了none网络的容器,就不能通过网络与外界通信,所以它的应用场景只能是容器不想被网络连接的情况。
host network
我们先将上面启动的容器关掉删除后,重新运行一个连接到host网络的容器:
docker run -d --name test --network host hub.c.163.com/library/busybox:latest /bin/sh -c "while true;do sleep 3600;done"
然后查看host网络的连接信息:
docker network inspect host
结果如下:
"Containers": {
"41db4524fa271053733f2d65dd8fec8f72a2f040b85e1b840daf351f2d66e408": {
"Name": "nginx-test",
"EndpointID": "4da3ab311a5d698c45b775654e0e23d246876971ef40ab27b016a4f9c0edafd7",
"MacAddress": "",
"IPv4Address": "",
"IPv6Address": ""
}
},
发现连接的容器的ip地址也是为空。但是我们进入容器查看:
[vagrant@localhost ~]$ docker exec -it 41db4524fa27 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 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 dynamic eth0
valid_lft 60259sec preferred_lft 60259sec
inet6 fe80::5054:ff:fe5f:9478/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
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
64: br-ec80468730b6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
link/ether 02:42:01:53:f2:be brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-ec80468730b6
valid_lft forever preferred_lft forever
inet6 fe80::42:1ff:fe53:f2be/64 scope link
valid_lft forever preferred_lft forever
发现容器内部的网络信息和docker宿主机的网络信息相同,这是因为连接到了host网络的容器创建的时候没有创建自己的network namespace,而是共享了宿主机的network namespace。
这个host网络一般有什么用途呢?暂时不知道,以后知道再补充吧。
网友评论