我試圖瞭解發生了什麼事情下的網絡數據包來自連接到主機的線路,並指向Docker容器內的應用程序。如果它是一個典型的虛擬機,我知道到達主機的數據包將被虛擬機管理程序(比如VMware,VBox等)發送到虛擬機的虛擬網卡,然後通過TCP/IP協議棧的客戶操作系統,最終到達應用程序。碼頭集裝箱是否有自己的TCP/IP堆棧?
在泊塢的情況下,我知道在主機上到來的分組被從主機的網絡接口轉發到docker0
橋,被連接到一個veth
對容器內的虛擬接口eth0
上結束。但之後呢?由於所有Docker容器都使用主機內核,因此推測數據包由主機內核的TCP/IP堆棧處理是否正確?如果是這樣,怎麼樣?
我真的很想閱讀詳細的解釋(或者如果你知道一個資源可以隨意鏈接它)關於真正發生的事情。我已經仔細閱讀this頁面,但它並沒有說明一切。
在此先感謝您的答覆。
是的,使用主機TCP/IP堆棧。閱讀完鏈接的頁面後,除了閱讀linux內核和docker源代碼之外,很難添加更多內容 - 您是否有任何具體問題? – nos
感謝您的評論。那麼,例如,我不清楚數據是如何從主機的docker0橋傳輸到eth0的:我嘗試使用wireshark,但是我只能看到從docker0交換的數據包和' vethXYZ';我還認爲'docker0'和'eth0'之間有一個NAT,因爲地址有變化,但是我沒有找到關於它的文檔。 –
對,其中大部分內容,包括docker使用的NAT規則都在該文檔中進行了解釋。 – nos