PSA - 使用 bond0 的自訂 Docker 網路問題

我目前所有的 Docker 都在我的 NAS 上運行,運行得還不錯。我在使用 NAS 上的 docker network CLI 創建 docker 網路時,發現了一個有趣的情況。

docker network create -d qnet --opt=iface=bond0--ipam-driver=qnet --ipam-opt=iface=bond0 --subnet 192.168.1.0/23 --gateway 192.168.1.1  qnet-static-bond0-custom

上面的指令會使用我的 LAG 綁定的 10GB 網路來建立一個 docker 網路。然後我會將各種 Docker 應用程式分配到這個網路上。

問題在於,當我執行這個指令時,它會在我的 10GB 綁定網卡下創建一個虛擬交換器,然後這個虛擬交換器會接管原本分配給網卡的 IP 資訊。

發生這種情況後,你就無法再用 NAS 的網路與交換器 GUI 應用程式來更改網卡資訊。你唯一能做的,就是先移除 docker 網路,再移除虛擬交換器,才能恢復到原本狀態。

如果你將該指令綁定到單一網卡(例如 eth0),就不會有這個問題。

我不確定這是網路與交換器應用程式的限制,還是單純因為這不是官方建議的設定。能夠用我的 10GB 綁定網路作為 Docker 應用程式的基礎網路會很不錯,但目前用標準的 eth0 也能正常運作。

分享這個經驗,給其他在 QNAP NAS 上運行較複雜 Docker 應用程式的人參考。

你不能直接在 Container Station 的圖形介面(GUI)操作嗎?我通常都會為特定的容器選擇想要使用的網路介面卡。你應該可以選擇綁定的網路介面卡。

是的,如果你只是做一個簡單的容器拉取部署,可以使用一般的圖形介面(GUI)。這其實運作得相當不錯。

但如果你要用 docker compose 檔案並且有更進階的網路需求,你可以在檔案裡或透過命令列定義一個 docker 網路。我就是這樣發現這個方法的。我在建立網路,這樣就能為 docker 應用程式設定各種網路參數。

在 docker compose 檔案中,你可以透過加入如下內容來使用新的 docker 網路功能。

# 在 app 區塊下加入 -
services:
  app:
    networks:
    qnet-static-bond0-custom:
      mac_address: xx:xx:xx:xx:xx:xx
      ipv4_address: 192.168.1.112

# 在 compose 檔案結尾加上
networks:
  qnet-static-bond0-custom:
    external: true

是的,我在一些 YAML 腳本中也會這麼做。那麼,通過 YAML 新增 bonded 埠口(bonded port)是不是不能正常運作?

我可以使用帶有 bond0 的設定,Docker 應用程式也能正常運作。只是這樣設定後,NAS GUI 裡的 Network&Switch 應用程式無法正確顯示網路狀態,導致之後如果需要更改網路介面卡設定時會出現問題。Docker 應用程式在 Network&Switch 裡也會顯示缺少介面卡的警告。所以為了確保一切正常運作,我最後在建立 Docker 網路時只用 eth0,這樣一切都如預期運作。

我不確定 Network&Switch 的問題是不是因為程式沒考慮到這種變化。

雖然 NAS 支援 bond0 設定,但似乎不是所有應用程式都能正確使用它。這段時間我已經開了很多工單要求 QNAP 修正 bond0 網路的使用問題。

嗨,感謝您的反饋!我會將這個意見轉交給我們的內部團隊進行調查與分析。謝謝您!