docker容器是否有自己的TCP / IP堆栈?

时间:2014-07-07 12:49:09

标签: networking docker tcp-ip linux-containers

我试图了解连接到主机并连接到Docker容器内的应用程序的网络数据包所引起的内容。

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

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

我真的想阅读详细的解释(或者如果您知道资源可以随意链接它),了解真正发生的事情。我已经仔细阅读了this页面,但它并没有说出一切。

提前感谢您的回复。

1 个答案:

答案 0 :(得分:9)

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

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

我希望这能为你提供更深入的指导。