ciz*_*ixs 25 networking docker
我知道默认情况下,docker会创建一个虚拟网桥docker0,并且所有容器网络都会链接到docker0.

如上图所示:
eth0配对vethXXXvethXXX链接到docker0与交换机链接的机器相同但是docker0和东道主之间的关系是什么eth0?进一步来说:
问题2可能有点令人困惑,我会把它保留在那里并解释一下:
eth0.如何转发到容器?我的意思是,必须有一些地方存储信息,我该如何检查?提前致谢!
在阅读了答案和官方网络文章后,我发现下面的图表更准确,docker0并且eth0没有直接链接,而是可以转发数据包:
http://dockerone.com/uploads/article/20150527/e84946a8e9df0ac6d109c35786ac4833.png
Mat*_*att 22
默认docker0网桥和主机以太网设备之间没有直接链接.如果您--net=host对容器使用该选项,则将链接主机和容器网络堆栈.
当数据包从容器流向docker0时,它如何知道它将被转发到eth0,然后转发到外部世界?
该docker0桥梁有.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
Run Code Online (Sandbox Code Playgroud)
容器被分配一个连接到docker0桥的veth接口.
$ bridge link
10: vethcece7e5 state UP @(null): <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master docker0 state forwarding priority 32 cost 2
Run Code Online (Sandbox Code Playgroud)
在默认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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
iptables处理连接跟踪和返回流量.
当外部数据包到达eth0时,为什么它被转发到docker0然后容器?而不是处理它或丢弃它?
如果您询问返回出站流量,请参阅上面的iptables.
如果您的意思是新的入站流量,默认情况下不会将数据包转发到容器中.实现此目标的标准方法是设置端口映射.Docker启动一个守护程序,该守护程序在端口X上侦听主机并转发到端口Y上的容器.
我不确定为什么NAT也不用于入站流量.我遇到了一些问题,试图将大量端口映射到容器中,导致将现实世界接口完全映射到容器中.
| 归档时间: |
|
| 查看次数: |
10916 次 |
| 最近记录: |