如何自訂Windows Container NAT網路IPAM-Subnet設定

如何自訂Windows Container NAT網路IPAM-Subnet設定

在前一篇解決 Symantec Endpoint Protection 與 Docker 相容性問題碰到一個問題,Docker for Windows 預設 NAT 網路無法重設,主要是想統一開發人員的 NAT 網路設定,這樣 IT 單位才方便統一套用防火牆規則。

我測試以下幾種方式:

  1. 在 daemon.json 指定 fixed-cidr
  2. 使用 docker network rm nat 移除,直接顯示「daemon: nat is a pre-defined network and cannot be removed」訊息
  3. 採用 Github #726 步驟,但我在 Windows 10 上執行 Get-NetNat 沒有任何訊息,Get-ContainerNetwork | Remove-ContainerNetwork 更顯示沒有此指令。

基本是都行不通。最後實在沒找到辦法才請開發人員統一自訂一條 NAT 網路。

不過就在不死心的狀態下,又在我個人的 Surface Pro 上又試了一次。

docker network inspect nat with fixed cidr

媽呀,是不是眼花了!查詢一下 CIDR 的值:

CIDR to IP Rang

172.86.32~47.x 都是合法值,立馬請同事幫忙驗證,Bing go!

設定自定 IP Range

  • 切換至 Windows Container
  • Settings --> Daemon --> Advanced
    • "fixed-cidr":"172.86.43.0/20", "experimental":true 加入這二組設定
  • 重新開機,重新啟動 docker service
  • docker network inspect nat 確認 nat 組態

目前我的 Surface 與同事電腦都是 Windows 10 Version 1903。不理我的工作機是 Windows 10 Version 1809,心裡浮現「你戴的那副液晶體顯影眼鏡是兩年前美國過時的產品,而我這副隱形液晶體顯影眼鏡,是上個月西德最新產品,價值11萬美金。」的這畫面。

我自己推論,"fixed-cidr" 這組設定需要與 Version 1903+ 配合才能在 Docker for Windows 生效。

這是無法套用成功的 Version 1809:

C:\>ver
Microsoft Windows [版本 10.0.17134.829]

這是可以套用成功的 Version 1903:

C:\>ver
Microsoft Windows [版本 10.0.18362.239]

這目前兩台主機 Docker for Windows :

Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:31 2019
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.24)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:28:48 2019
  OS/Arch:          windows/amd64
  Experimental:     true

相同的問題在 Linux Container 要自訂 bridge 網路也是一樣方式設定,但應該就沒有作業系統版本相關。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。