我正在尝试理解从连接到主机的电线传输到Docker容器内部应用程序的网络数据包背后发生了什么。
如果它是经典虚拟机,我知道抵达主机的数据包会被 hypervisor(例如 VMware、VBox 等)传输到虚拟机的虚拟网卡上,然后通过客户操作系统的 TCP/IP 协议栈最终到达应用程序。
在 Docker 的情况下,我知道从主机接收的数据包会从主机的网络接口转发到连接到容器内部虚拟接口 eth0 上的 veth 对端的 docker0 桥。但此后呢?既然所有 Docker 容器都使用主机内核,那么可以假设该数据包由主机内核的 TCP/IP 协议栈处理吗?如此,又是如何处理的呢?
我真的希望能够阅读详细的说明(或者如果您知道相关资源,请随意提供链接)有关幕后实际发生的情况。我已经认真阅读了这个页面,但它并没有说清楚全部内容。
感谢您的回复。
docker0
桥传输到主机机器的eth0
,我尝试使用wireshark,但我只能看到从docker0
和vethXYZ
交换的数据包;我还假设在docker0
和eth0
之间存在NAT,因为地址会改变,但我没有找到相关文档。 - Manuel Durando