35

我试图了解网络数据包的幕后情况,该网络数据包来自连接到主机的线路并定向到 Docker 容器内的应用程序。

如果它是一个经典的 VM,我知道到达主机的数据包将由管理程序(例如 VMware、VBox 等)传输到 VM 的虚拟 NIC,并从那里通过来宾操作系统的 TCP/IP 堆栈,最终到达应用程序。

在 Docker 的情况下,我知道来自主机的数据包从主机的网络接口转发到docker0网桥,该网桥连接到以容器内veth的虚拟接口结束的一对。eth0但在那之后呢?由于所有 Docker 容器都使用宿主内核,假设数据包由宿主内核的 TCP/IP 堆栈处理是否正确?如果是这样,怎么做?

我真的很想阅读有关幕后实际发生的事情的详细解释(或者如果您知道资源可以随意链接它)。我已经仔细阅读了这个页面,但它并没有说明一切。

提前感谢您的回复。

4

1 回答 1

12

网络堆栈,就像“代码”中一样,绝对不在容器中,它在内核中,主机和所有容器只有一个共享(你已经知道了)。每个容器都有自己独立的网络命名空间,这意味着它有自己的网络接口和路由表。

这是一篇简短的文章,通过一些示例介绍了这个概念:http: //blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/ 我发现这篇文章也很有帮助: http ://containerops.org /2013/11/19/lxc-网络/

我希望这能给你足够的指导来深入挖掘。

于 2014-10-24T15:39:20.097 回答