我知道我可以在 Docker 命令或 Dockerfile 或 docker-compose.yml 中將主機埠映射到容器埠。我在那里沒有問題,我也知道該怎么做。
例如,我有以下容器:
$ docker container ls
ID COMMAND PORTS
84.. "python app.py" 0.0.0.0:5000->5000/tcp
我知道這意味著主機埠 5000 映射到容器埠 5000。
我的問題只是0.0.0.0一部分。我做了一些研究,據說這0.0.0.0:5000意味著映射主機上所有介面的5000埠。
我了解主機上的 5000 埠,但我沒有得到“主機上的所有介面”,這到底是什么意思?有人可以為我詳細說明嗎?這是否意味著主機上的所有網路介面?這個“0.0.0.0”到底指的是什么“所有介面”?
uj5u.com熱心網友回復:
您的物理硬體可以有多個網路介面。在當今時代,您可能擁有無線以太網連接,但您也可能擁有有線以太網連接,或其中多個,或某種其他網路連接。如果您在 Linux 主機上運行ifconfig,??您可能至少有兩個介面,您的“真實”網路連接和一個僅到達主機的特殊“環回”連接。(在容器內也是如此,除了“環回”介面只到達容器。)
當您設定網路偵聽器時,使用低級系結(2) 呼叫或任何更高級別的包裝器,您不僅要指定正在偵聽的埠,還要指定特定的 IP 地址。如果您在 127.0.0.1 上收聽,您的行程將只能從環回介面訪問,但不能從機外訪問。例如,如果您有兩個網路連接,一個連接到外部網路,一個連接到內部網路,您可以指定內部網路的 IP 地址并擁有一個外部世界無法訪問的服務。
這就是 0.0.0.0 的用武之地。可以撰寫掃描所有網路介面并分別監聽所有網路介面的代碼,但 0.0.0.0 是表示“所有介面”的簡寫。
在 Docker 中,這以三種方式出現:
默認
-p監聽地址為 0.0.0.0。在典型的開發人員系統上,您可能希望明確指定-p 127.0.0.1:8080:8080只能從物理主機訪問您的服務。如果您確實有一個多宿主系統,則可以使用
-p 10.20.30.40:80:8080僅在一個網路介面上發布埠。在一個容器內,主容器行程一般必須監聽 0.0.0.0。由于每個容器都有自己的私有 localhost,因此偵聽 127.0.0.1(開發服務器的常見默認值)意味著無法從其他容器或通過
docker run -p.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/533196.html
標籤:码头工人码头工人撰写
