簡體   English   中英

docker-compose 網絡和發布端口

[英]docker-compose networking and publishing ports

我試圖更好地理解 docker 網絡,但我對以下內容感到困惑:

我通過docker-compose (client, api) 啟動了 2 個包含。 當我這樣做時,會創建一個新網絡myapp_default ,並且每個容器都加入這個網絡。 該網絡是橋接網絡,位於172.18.0.1 客戶端位於172.18.0.2 ,api 位於172.18.0.3

我現在可以在172.18.0.2:8080訪問客戶端,在172.18.0.2:8080訪問172.18.0.3:3000這完全有道理。 當我在 docker-compose 中發布端口時,我很困惑:客戶端上的 8080:8080 和 api 上的 3000:3000。

現在我可以從以下位置訪問容器:

  • 位於172.18.0.1:8080172.18.0.2:8080客戶端,以及位於172.17.0.1:8080的 docker0 網絡上的客戶端
  • API 在172.18.0.1:3000172.18.0.3:8080和 docker0 網絡上的172.17.0.1:3000

1)為什么我發布端口時可以通過docker0網絡訪問客戶端和api?

2) 為什么我可以通過172.17.0.1172.18.0.1連接到容器?

您只能訪問容器專用 IP 地址,因為您與 Docker 守護程序位於同一本地 Linux 主機上。 這在任何其他環境(不同的主機、MacOS 或 Windows 主機、Docker 位於 VM 中的 Docker 工具箱等環境)中都不起作用,甚至使用docker inspect查找這些 IP 地址通常也不是最佳實踐。

當您發布端口時,它們可以在主機上的這些端口上訪問。 確實適用於所有環境(在 Docker Toolbox 中,“主機”是 VM)並且是從 Docker 空間外部訪問容器的推薦方式。 除非您綁定到特定地址,否則可以在每個主機接口和每個主機 IP 地址上訪問容器; 這包括使用 Docker 橋接網絡創建的人工 172.17.0.1

發布端口是 Docker 所做的其他與網絡相關的設置的補充; 它不會阻止您通過其他路徑到達容器。

如果還沒有,您還應該閱讀 Docker 文檔中的 Compose中的網絡 無論您是否發布端口,您都可以使用docker-compose.yml文件中的名稱(如clientapi作為主機名,連接實際服務器進程正在偵聽的(未映射)端口。 在此功能和您從發布端口獲得的內容之間,您實際上並不需要直接知道容器專用 IP 地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM