Docker容器中的网络

三种内置的网络模式

安装Docker后,Docker会为我们创建三种类型的网络:bridge,host和none。使用docker network ls命令可以查看。

bridge模式

Docker默认的网络模式,此模式下,容器拥有自己独立的Network Namespace。简单的来说,Docker在宿主机上虚拟了一个子网络,宿主机上的所有容器都从这个子网络获取ip,这个子网络通过网桥挂在宿主机上。Docker通过NAT技术来确保容器可以和宿主机外部网络交互。Docker安装时会在宿主机上新建一个docker0网桥,通过宿主机下运行ip addr show命令可以查看到此网桥。连接在同一个Docker网桥上的容器可以通过IP相互访问。如此实现了宿主机到容器,容器与容器之间的联通性。除非你使用docker run --network=<NETWORK>显示的指定了网络,否则Docker默认会指定你的容器使用docker0网络。

host模式

使用host模式的容器与宿主机共用同一个网络栈,ip和端口。这意味这在容器中暴露的端口可以直接通过宿主机访问。相比于bridge模式,host模式拥有明显的性能优势(走的是宿主机的网络栈,而不是Docker deamon为为容器虚拟的网络栈)。

none模式

none模式下的容器不能访问任何外部路由,只能通过文件IO和标准输入输出交互,或者通过docker attach <CONTAINER>进入容器进行交互。

参考文章: