docker0,Docker Bridge驱动程序和容器之间的关系

时间:2017-06-14 12:37:21

标签: docker docker-networking

我正在看YouTube video on Docker networking,看到了这张幻灯片:

enter image description here

我试图理解它。来自docker0 docs

  

" 默认情况下,Docker服务器会创建并配置主机系统docker0一个名为docker0的网络接口,这是一个以太网网桥设备。如果在启动容器时未指定其他网络,则容器将连接到网桥,来自容器的所有流量都将通过网桥流向Docker守护程序,该守护程序代表容器处理路由。 / EM>"

但我对这里的交通流量仍然有点困惑。让我们说我在新主机上安装Docker。我假设docker0已创建&在安装时配置。所以现在我的主机上有这个docker0以太网桥。

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

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

由于我没有指定网络驱动程序,因此默认为我选择bridge。根据上面文档中的模糊,容器现在应该通过docker0网桥发送/接收流量。但是,在上图中,指示的是没有来自docker0和I'的基于桥接的容器(C4,C5,C6)的流量。我想知道:为什么?!任何想法?提前谢谢!

1 个答案:

答案 0 :(得分:2)

你是对的,这个方案并不完全符合正在发生的事情。我没看过这个视频,也许是那个"图片"是具体时刻的快照。也许我们应该看视频来理解背景。

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

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