美文网首页
docker 网络之host,none

docker 网络之host,none

作者: 云师兄 | 来源:发表于2018-05-23 23:23 被阅读16次

执行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网络一般有什么用途呢?暂时不知道,以后知道再补充吧。

相关文章

网友评论

      本文标题:docker 网络之host,none

      本文链接:https://www.haomeiwen.com/subject/eegdjftx.html