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

其中 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 增加網路