【问题标题】:Relationship between docker0, Docker Bridge Driver and Containersdocker0、Docker Bridge Driver和容器的关系
【发布时间】:2017-06-14 12:37:21
【问题描述】:

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

我正在努力理解它。来自docker0 docs

"默认情况下,Docker服务器会创建并配置宿主系统的docker0一个名为docker0的网络接口,这是一个以太网桥接设备。如果在启动容器时没有指定不同的网络,容器连接到网桥,所有进出容器的流量都通过网桥流向 Docker 守护进程,后者代表容器处理路由。"

但我对这里的流量还是有点困惑。假设我在新主机上安装 Docker。我假设docker0 是在安装时创建和配置的。所以现在我的主机上有这个docker0 以太网桥。

现在假设我在新的 Docker 主机上启动了一个容器:

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

由于我没有指定网络驱动程序,所以默认为我选择了bridge。根据上面文档中的简介,容器现在应该通过 docker0 网桥发送/接收流量。但是,在上图中,表明没有流量从docker0 流入/流出基于桥接的容器(C4、C5、C6),我想知道:为什么?!强> 有什么想法吗?提前致谢!

【问题讨论】:

    标签: docker docker-networking


    【解决方案1】:

    您是对的,该方案与正在发生的事情不完全吻合。我没有看到视频,也许那个“图片”是一个具体时刻的快照。也许我们应该看视频来了解上下文。

    无论如何,当 Docker 创建docker0 接口时,有一些使用新链(DOCKER 和 DOCKER-ISOLATION)创建的 iptables 规则。默认情况下,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)。

    【讨论】:

    • 不错的信息。请注意,第一个容器从 172.17.0.2 开始(.1 用于主机本身)
    • 感谢@OscarAkaElvis (+1) - 澄清一下,我确实在上面的第一句话中发布了视频链接,我的屏幕截图是从该视频的 10:45 截取的。
    • 另外,在上面的截图中,(1)docker0,(2)容器的“桥”和(3)标记为br-ee40a8236479的东西有什么区别?再次感谢!
    • 对@罗伯特。已更正
    • 我看了视频:docker0 是主机 1 中的默认网桥,br-ee40a8236479 是主机 2 中用户定义的网桥。主机 1 和主机 2 在底层网络中有一些连接。容器的桥是指容器连接到默认桥或用户定义的桥。
    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2021-08-19
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多