▪️Network - 概念
2024-10-5
| 2025-3-19
字數 563閱讀時間 2 分鐘

Overview

啟動 container 時如果沒有特別設定, 預設會在 172.17.0.0/16 網段啟動 (預設 bridge)。
 
同一 bridge 的 container 彼此 可以 互通
不同 bridge 的 container 彼此 不可以 互通
沒設定端口轉發的 container 跟 宿主機同網段的另一台主機 B ⇒ container 可以 訪問主機 B ⇒ 主機 B 不可以 訪問 container,要訪問需要 container 設定端口轉發到宿主機
 
docker 的網路架構如下:
notion image
其中 docker0 就是 docker 預設 bridge 的網卡接口

docker bridge 是什麼

可以把它想成是現實世界的交換器,專門負責處理同網段中,容器跟容器之間的互通,以及容器溝通外網的NAT 處理。
 
預設會在 172.17.0.0/16 網段,如果新增 bridge 會在中間加 1 (172.18.0.0/16),以此類推
 
不同 bridge 的容器彼此無法互通,除非有設定端口轉發, 並且默認的 bridge 沒有提供 DNS 功能,無法解析域名,所以需要使用 ip address 來 ping

為什麼 container 跟 container 可以互通

因為 container 會經由設定的 bridge 來跟同網段的 container 來進行通信

為什麼 container 可以連接外網

可以從上方的網路架構圖來看,container 向外傳遞的封包,其實會經由 docker 的 bridge 來進行 NAT 轉址發送出去
 
而外網傳回來的封包,一樣經由 bridge 來進行 NAT 判斷要傳遞的 container ip 位址。
 
而 NAT 具體怎麼轉,會經由 bridge 設定的 iptables 而定

如何讓 本機 和 container 互通

由於本機跟 container 的網段不同,所以無法彼此連線 所以如果要讓主機跟 container 可以互通,就需要在啟動容器時,設定端口轉發
ex:
 
這樣就會將 container 的 port 映射到 本機的 port ,同網段就可以互通連線了。

container 能同時在複數網段嗎?

可以,container 可以同時存在複數網段,可以使用 docker network connect 指令來讓 container 增加網路

 
  • Docker
  • Network - 指令Volume - 指令
    Loading...