none 网络
none 网络,即没有网络。容器仍是一个独立的 Network Namespace,但没有网络接口,没有 IP。
创建 none 网络容器
在 docker run 命令中,通过--network none 选项指定创建的容器没有网络功能。
docker run -d --name bb5 --network none busybox /bin/sh -c "while true; do sleep 3600; done"
查看容器详情
通过 docker inspect 命令查看该容器的详情,发现其没有 IP,没有网关,没有 MAC 地址。
查看容器网络接口
通过 ip a 命令查看容器的网络接口,发现其只有一个回环地址 lo,没有其它接口。
host 网络
host 网络,即与宿主机 host 共用一个 Network Namespace。该网络类型的容器没有独立的网络空间,没有独立的 IP,全部与 host 共用。
创建 host 网络容器
在 docker run 命令中,通过--network host 选项指定创建的容器为 host 网络。
docker run -d --name bb6 --network host busybox /bin/sh -c "while true; do sleep 3600; done"
查看网络详情
通过 docker network inspect host 命令查看网络详情,发现容器 bb6 连接在该网络上,但容器 bb6 却没有 IP、MAC,并且该网络模式中居然没有网关 Gateway。因为该网络模式实际相当于没有网络,容器与宿主机共用 Network Namespace,根本就不需要网络连接。
查看 host 与容器网络接口
通过 ip a 与 docker exec bb6 ip a 命令分别查看宿主机与容器 bb6 的网络接口,发现是一样的。因为它们共用一个 Network Namespace,所以也就共用了所有网络接口。
关于端口映射
由于容器与宿主机共用一个 Network Namespace,所以无论是 IP 还是应用程序的 Port,容器与宿主机的都是相同的,所以对于容器中应用程序的 Port 不存在映射的问题,host 中的 Port 与容器中的 Port 相同。
也正因为 host 与容器中的应用使用的是相同的端口号,所以当采用 host 网络模式时,在一个宿主机中只能启动一个应用的一个容器,否则会出现端口号冲突问题。