这一节我们来看一下docker中的另外两种网络,host和none。
先使用docker network ls查看容器的网络。
然后,使用docker network inspect none查看none这个网络上面连接的容器。 看到现在none这个网络上面连接的容器是没有的。 使用docker image ls查看有哪些docker image,然后,使用下面的命令启动docker container: 其中,--network none表示容器启动时指定使用none网络。
docker run -d --name test1 --network none flask-hello-docker
再使用docker network inspect none查看none这个网络上面连接的容器 于是就看到Containers, 里面包含了一个test1 表示这个容器连接到了none。
然后,使用docker exec -it test1 /bin/sh进入到test容器中。
然后执行ip a
可以发现test1除了有一个lo本地回环口就没有其他网络接口了,这就意味着test1这个容器所在的namespace是一个孤立的,我们只可以通过docker exec -it test1 /bin/sh访问这个容器,除此之外没有其他任何方式可以访问到这个容器。
既然我们谁都不能访问这个test1容器(连接到none这个网络的容器),那创建这个容器有什么用呢?我们实际应用中可能会存在安全低等级比较高的应用,比如存储密码的容器,我不想让这个存储密码的服务让任何人访问到,只有自己在本地访问就可以了,这时可以通过这种方式来实现。
然后我们再来看看host这种网络。我们先停掉test1,然后再删除test1。
然后,重启启动test1,指定网络是host。
docker run -d --name test1 --network host flask-hello-docker
再看一下host网络上连接的容器有哪些
docker network inspect host
然后,使用docker exec -it test1 /bin/sh进入到test容器中。
运行ip a
然后使用exit退出test1容器,这时,在linux主机上使用ip a
我们发现,使用host网络的容器,它们的没有自己的network namespace,它和主机共享一套network namespace。
通过连接host网络这种方式启动docker container存在一个问题,就是可能会存在端口冲突的问题。