我知道默认情况下docker创建一个虚拟网桥docker0,并且所有容器网络都链接到docker0

如上图所示:

  • 容器eth0vethXXX配对
  • vethXXX链接到docker0,就像链接到切换
  • 的机器一样

    但是docker0和主机eth0之间的关系是什么?
    进一步来说:
  • 当数据包从容器流到docker0时,如何知道将其转发到eth0,然后再转发给外部世界?
  • 当外部数据包到达eth0时,为什么将其转发到docker0然后转发到容器?而不是处理它或丢弃它?

  • 问题2可能会让人有些困惑,我将保留在那里并解释更多:
  • 这是由容器(问题1)初始化的返回数据包:由于外部不知道容器网络,因此该数据包被发送到主机eth0。如何将其转发到容器?我的意思是,必须有一些存储信息的地方,如何检查?

  • 提前致谢!

    阅读答案和官方网络文章后,我发现下图更准确地表明docker0eth0没有直接链接,而是可以转发数据包:

    http://dockerone.com/uploads/article/20150527/e84946a8e9df0ac6d109c35786ac4833.png

    最佳答案

    默认docker0网桥和主机以太网设备之间没有直接链接。如果对容器使用--net=host选项,则主机网络堆栈将在容器中可用。
    docker0桥分配了Docker网络的.1地址,通常在172.17或172.18左右。

    $ ip address show dev docker0
    8: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
        link/ether 02:42:03:47:33:c1 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 scope global docker0
           valid_lft forever preferred_lft forever
    
    为容器分配了一个veth接口(interface),该接口(interface)连接到docker0桥。
    $ bridge link
    10: vethcece7e5 state UP @(null): <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master docker0 state forwarding priority 32 cost 2
    
    在默认Docker网络上创建的容器将.1地址作为其默认路由。
    $ docker run busybox ip route show
    default via 172.17.0.1 dev eth0
    172.17.0.0/16 dev eth0  src 172.17.0.3
    
    Docker使用NAT MASQUERADE从那里进行出站流量,它将遵循主机上的标准出站路由,这可能会涉及eth0,也可能不涉及。
    $ iptables -t nat -vnL POSTROUTING
    Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0
    
    iptables处理连接跟踪并返回流量。

    如果您询问有关来自容器的出站流量的返回路径,请参见上面的iptables,因为MASQUERADE会将连接映射回去。
    如果您是指新的入站流量,则默认情况下不会将数据包转发到容器中。实现此目的的标准方法是设置a port mapping。 Docker启动一个守护程序,该守护程序侦听端口X上的主机,然后转发到端口Y上的容器。
    我不确定为什么NA​​T也没有用于入站流量。我遇到了一些问题,试图将大量端口映射到容器中,从而导致mapping real world interfaces完全进入容器。

    关于networking - docker0和eth0有什么关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37536687/

    10-10 10:43