我正在看YouTube video on Docker networking,看到了这张幻灯片:
我试图理解它。来自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)的流量。我想知道:为什么?!任何想法?提前谢谢!
答案 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)。