docker0,Docker Bridge Driver和Containers之间的关系

我正在看Dockernetworking上的YouTubevideo ,看到这个幻灯片:

在这里输入图像说明

我正在试着去理解它。 从docker0文档 :

默认情况下,Docker服务器创build并configuration主机系统的docker0一个叫做docker0的networking接口,它是一个以太网桥设备。如果在启动一个容器时没有指定不同的networking,那么容器连接到网桥,来自和去往容器的stream量通过网桥stream向Docker守护进程,Docker守护进程代表容器处理路由。

但是我对这里的交通stream量还是有点困惑。 比方说,我在一台新的主机上安装Docker。 我认为docker0是在安装时创build和configuration的。 所以现在我的主机上有这个docker0以太网桥。

现在让我们说我在我的新的Docker主机上启动一个容器:

 docker run -it -p 9200:9200 -d --name myapp myapp 

由于我没有指定networking驱动程序,因此默认情况下为我select了bridge 。 根据以上文档的介绍,集装箱现在应该通过docker0桥发送/接收业务。 然而,在上面的图表中,显示的是没有任何stream量从docker0的桥梁集装箱(C4,C5,C6)stream入/ docker0我想知道:为什么? 有任何想法吗? 提前致谢!

你是对的,那个scheme不适合正在发生的事情。 我没有看到video,也许这个“图片”是一个具体时刻的快照。 也许我们应该看video来了解上下文。

无论如何,当Docker创builddocker0接口时,有一些使用新链(DOCKER和DOCKER-ISOLATION)创build的iptables规则。 默认情况下,Docker容器只能从主机访问。 然后在docker run命令中使用-p选项,您可以直接将主机上的端口映射到容器。 这样做,你可以达到你的主机上的确实在容器上的某个端口。 您可以使用iptables -t nat -L在运行容器之前和之后检查NAT表。 你会看到映射的区别和规则。

是的,这些容器是在同一个networking上创build的,他们可以尝试在这个networking上进行通信。 默认情况下,用于docker的networking范围是172.17.0.0/16,所以你的第一个容器是172.17.0.2,第二个容器是172.17.0.3,依此类推。 (172.17.0.1是你的docker0 ip)。