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

Networking docker容器是否有自己的TCP/IP堆栈?,networking,docker,tcp-ip,linux-containers,Networking,Docker,Tcp Ip,Linux Containers,我试图理解在引擎盖下发生了什么,一个网络数据包从连接到主机的电线上发送到Docker容器中的应用程序 如果它是一个典型的虚拟机,我知道到达主机的数据包将由虚拟机监控程序(如VMware、VBox等)传输到虚拟机的虚拟NIC,并从那里通过来宾操作系统的TCP/IP堆栈,最终到达应用程序 在Docker的情况下,我知道来自主机的数据包从主机的网络接口转发到docker0网桥,该网桥连接到容器内以虚拟接口eth0结尾的veth对。但是在那之后呢?由于所有Docker容器都使用主机内核,因此假定数据包由

我试图理解在引擎盖下发生了什么,一个网络数据包从连接到主机的电线上发送到Docker容器中的应用程序

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

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

我真的很想读一篇详细的解释(或者如果你知道一个资源,请随意链接它)关于引擎盖下到底发生了什么。我已经仔细阅读了这一页,但它并没有说明一切

提前感谢您的回复。

网络堆栈,如“代码”中所述,肯定不在容器中,而是在内核中,主机和所有容器只共享一个(您已经知道这一点)。每个容器都有自己独立的网络名称空间,这意味着它有自己的网络接口和路由表

下面是一篇简短的文章,用一些例子介绍这个概念: 我发现这篇文章也很有帮助:


我希望这能为您提供足够的指导,以便深入挖掘。

是的,使用了主机TCP/IP堆栈。在阅读了您链接到的页面后,除了阅读linux内核和docker源代码之外,很难再添加更多内容-您有任何具体问题吗?谢谢您的评论。例如,我不清楚数据是如何从
docker0
桥接器传输到主机的
eth0
:我尝试使用wireshark,但我只能看到从
docker0
vethXYZ
交换的数据包;我还假设在
docker0
eth0
之间有一个NAT,因为地址发生了变化,但我没有找到关于它的文档。对,大部分内容,包括docker使用的NAT规则,都在该文档中进行了解释。我的错是,我因为标题而跳过了“将容器端口绑定到主机”一段;对不起,浪费了你的时间。我建议您在回答中转换您的第一条评论,因为您回答了关于TCP/IP堆栈的问题,我很乐意接受:-)