共用方式為


Windows 容器網路驅動程式

適用於:Windows Server 2025、Windows Server 2022、Windows Server 2019、Windows Server 2016

除了利用 Docker 在 Windows 上建立的預設 'nat' 網络之外,用戶可以定義自定義容器網路。 您可以使用 Docker CLI docker network create -d <NETWORK DRIVER TYPE> <NAME> 命令來建立使用者定義的網路。 在 Windows 上,有下列網路驅動程式類型可供使用:

NAT 網路驅動程式

附加至使用 'nat' 驅動程式建立之網路的容器會連線到 內部 Hyper-V 交換器,並從使用者指定的 (--subnet) IP 前綴接收 IP 位址。 支援從容器主機到容器端點的埠轉送/對應。

注意

在 Windows Server 2019 (或更新版本) 上建立的 NAT 網路在重新啟動後不會再保存。

建立 NAT 網路

若要使用子網 10.244.0.0/24建立新的 NAT 網路:

docker network create -d "nat" --subnet "10.244.0.0/24" my_nat

透明網路驅動程式

連結至使用「透明」驅動程式所建立網路的容器,將會透過 外部 Hyper-V 交換器,直接連線到實體網路。 實體網路的IP可以靜態指派(需要使用者指定的 --subnet 選項),或使用外部 DHCP 伺服器動態指派。

注意

由於下列需求,Azure VM 不支援透過透明網路連線您的容器主機。

必需:在虛擬化情境中使用此模式(容器主機為 VM)時,必須進行 MAC 位址欺騙

建立透明網路

若要使用子網 10.244.0.0/24建立新的透明網路,閘道 10.244.0.1、DNS 伺服器 10.244.0.7 和 VLAN 識別子 7

docker network create -d "transparent" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_transparent

重疊網路驅動程式

通常由 Docker Swarm 和 Kubernetes 等容器協調器使用,附加至 Overlay 網路的容器可以與連接至相同網路且分布於多個容器主機的其他容器通訊。 每個覆蓋網路都使用其自身的IP子網路來建立,這些子網路由私人IP前綴定義。 重疊網路驅動程式會使用 VXLAN 封裝來達到租戶的容器網路之間的網路流量隔離,並可以跨重疊網路重複使用 IP 位址。

需要:請確定您的環境符合這些必要 必要條件, 建立重疊網路。

需要:在 Windows Server 2019 上,這需要 KB4489899

需要:在 Windows Server 2016 上,這需要 KB4015217

注意

在 Windows Server 2019 和更新版本上,Docker Swarm 所建立的重迭網路會利用 VFP NAT 規則進行輸出連線。 這表示指定的容器會收到 1 個 IP 位址。 這也表示應該在偵錯情況下使用其 TCP/UDP 選項來設定 ICMP 型工具,例如 pingTest-NetConnection

建立疊加網路

若要使用子網 10.244.0.0/24、DNS 伺服器 168.63.129.16和 VSID 4096建立新的重疊網路:

docker network create -d "overlay" --attachable --subnet "10.244.0.0/24" -o com.docker.network.windowsshim.dnsservers="168.63.129.16" -o com.docker.network.driver.overlay.vxlanid_list="4096" my_overlay

L2bridge 網路驅動程式

連結至使用 'l2bridge' 驅動程式建立的網路容器,將會透過 外部 Hyper-V 交換器連線到實體網路。 在 l2bridge 中,由於輸入和輸出上的第 2 層地址轉譯(MAC 重新寫入)作業,容器網路流量會有與主機相同的 MAC 位址。 在數據中心,這有助於減輕交換機的壓力,因為它們必須學習有時短暫存在的容器的 MAC 地址。 L2bridge 網路可透過 2 種不同的方式進行設定:

  1. L2bridge 網路已設定與容器主機相同的IP子網
  2. L2bridge 網路已設定為新的自定義IP子網

在組態 2 中,用戶必須在作為閘道的主機網路區間上新增端點,並設定指定前置詞的路由功能。

建立 l2bridge 網路

若要使用子網 10.244.0.0/24建立新的 l2bridge 網路,網關 10.244.0.1、DNS 伺服器 10.244.0.7 和 VLAN 標識符 7:

docker network create -d "l2bridge" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_l2bridge

提示

L2bridge 網路可高度程式化;如需有關如何設定 l2bridge 的詳細資訊,請參閱這裡

L2tunnel 網路驅動程式

建立與 l2bridge 相同,不過 此驅動程式應該只用於 Microsoft Cloud Stack (Azure)。 l2bridge 的唯一差異在於,所有容器流量都會傳送至套用 SDN 原則的虛擬化主機,進而啟用容器 Azure 網路安全組 等功能。

網路拓撲和IPAM

下表顯示針對每個網路驅動程序的內部(容器對容器)和外部連線,如何提供網路連線。

網路模式/Docker 驅動程式

Docker Windows 網路驅動程式 一般用途 容器對容器 (單一節點) 容器對外部 (單一節點 + 多節點) 容器對容器 (多節點)
網路位址轉換 (Default) 適用於開發人員
  • 相同子網:透過 Hyper-V 虛擬交換器進行橋接連線
  • 跨子網:不支援 (只有一個 NAT 內部前置詞)
透過管理用 vNIC 轉送(綁定至 WinNAT) 不直接支援:需要透過主機開放埠口
透明 適用於開發人員或小型部署
  • 相同子網:透過 Hyper-V 虛擬交換器進行橋接連線
  • 跨子網:透過容器主機路由
透過具有直接存取實體網路適配器的容器主機進行路由 透過直接存取 (實體) 網路適配器的容器主機路由
重疊 適用於多節點; 對於 Docker Swarm 是必需的,但在 Kubernetes 中可用
  • 相同子網:透過 Hyper-V 虛擬交換器進行橋接連線
  • 跨子網:網路流量會封裝並透過 Mgmt vNIC 進行路由傳送
不直接支援 - 需要將第二個容器端點連接到 Windows Server 2016 上的 NAT 網路,或在 Windows Server 2019 上設定 VFP NAT 規則。 相同/跨子網:網路流量會使用 VXLAN 封裝,並透過 Mgmt vNIC 路由傳送
L2Bridge 用於 Kubernetes 和 Microsoft SDN
  • 相同子網:透過 Hyper-V 虛擬交換器進行橋接連線
  • 跨子網:在進入、出口及路由過程中會重新寫入容器的 MAC 位址。
在輸入和輸出上重新寫入容器 MAC 位址
  • 相同子網路:橋接連線
  • 跨子網:透過 WSv1809 和更新版本上的 Mgmt vNIC 路由傳送
L2Tunnel 僅限 Azure 相同/跨子網:重定向到實體主機 Hyper-V 虛擬交換器應用政策的位置 流量必須通過 Azure 虛擬網路閘道 相同/跨子網:在實體主機的 Hyper-V 虛擬交換器上進行髮夾路由,以應用政策的作用位置

IPAM

IP 位址會針對每個網路驅動程式以不同的方式配置和指派。 Windows 使用主機網路服務 (HNS) 為 nat 驅動程式提供IPAM,並與 Docker Swarm 模式 (內部 KVS) 搭配運作,以提供IPAM以進行重疊。 所有其他網路驅動程序都會使用外部IPAM。

網路模式/驅動程式 IPAM
NAT 透過主機網路服務(HNS)從內部 NAT 子網前綴進行動態 IP 配置和指派
透明 靜態或動態 (使用外部 DHCP 伺服器) 容器主機網路前綴內IP位址的IP配置和指派
覆蓋 透過 HNS 從 Docker 引擎 Swarm 模式受控前綴和指派的動態 IP 配置
L2Bridge 主機網路服務 (HNS) 從所提供的子網前綴進行動態 IP 配置和指派
L2Tunnel 僅限 Azure - 外掛程式的動態 IP 配置和指派

服務探索

只有特定 Windows 網路驅動程式才支援服務探索。

驅動程式名稱 本地服務探索 全域服務探索
nat 是的 是的,可與 Docker EE 搭配使用
覆蓋 是的 是與 Docker EE 或 kube-dns 搭配使用
透明
l2bridge 搭配 kube-dns 是的 使用 kube-dns 確定