PSA – Problem mit benutzerdefiniertem Docker-Netzwerk unter Verwendung von bond0

Ich betreibe derzeit alle meine Docker-Container auf meinem NAS. Es erledigt diese Aufgabe sehr gut. Mir ist eine interessante Situation aufgefallen, als ich Docker-Netzwerke über das Docker Network CLI auf dem NAS erstellt habe.

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

Der obige Befehl erstellt ein Docker-Netzwerk über mein LAG-gebündeltes 10GB-Netzwerk. Anschließend weise ich verschiedene Docker-Anwendungen diesem Netzwerk zu.

Das Problem tritt auf, wenn ich diesen Befehl ausführe: Es wird ein virtueller Switch unter dem Netzwerkadapter meines gebündelten 10GB-Netzwerks erstellt und der virtuelle Switch übernimmt die IP-Informationen, die dem Adapter zugewiesen waren.

In diesem Fall kann man die Netzwerk- und Switch-App in der NAS-GUI nicht mehr verwenden, um Adapterinformationen zu ändern. Man kann lediglich das Docker-Netzwerk entfernen und dann den virtuellen Switch löschen, um den Ursprungszustand wiederherzustellen.

Der oben genannte Befehl funktioniert problemlos, wenn man ihn an einen einzelnen Adapter wie eth0 bindet.

Ich weiß nicht, ob dies eine Einschränkung der Netzwerk- und Switch-App ist oder einfach ein nicht unterstütztes Setup. Es wäre schön, mein gebündeltes 10GB-Netzwerk als Basis für meine Docker-Anwendungen nutzen zu können, aber derzeit funktioniert eth0 problemlos.

Ich dachte, ich teile das, falls andere komplexere Docker-Anwendungen auf ihrem QNAP NAS betreiben.

Kannst du das nicht einfach in der Container Station-Oberfläche machen? Ich wähle immer den Netzwerkadapter aus, den ich für einen bestimmten Container verwenden möchte. Du solltest in der Lage sein, den gebündelten Adapter auszuwählen.

Ja, du kannst die normale GUI verwenden, wenn du eine einfache Container-Pull-Bereitstellung machst. Das funktioniert tatsächlich ziemlich gut.

Aber wenn du eine Docker-Compose-Datei mit erweiterten Netzwerkanforderungen verwendest, kannst du ein Docker-Netzwerk in der Datei oder über die Kommandozeile definieren. So habe ich das herausgefunden. Ich habe das Netzwerk erstellt, damit ich verschiedene Netzwerkparameter für eine Docker-App einstellen kann.

In der Docker-Compose-Datei kannst du das neue Docker-Networking nutzen, indem du etwa Folgendes hinzufügst:

# Unter dem App-Abschnitt hinzufügen -
services:
  app:
    networks:
    qnet-static-bond0-custom:
      mac_address: xx:xx:xx:xx:xx:xx
      ipv4_address: 192.168.1.112

# Am Ende der Compose-Datei hinzufügen
networks:
  qnet-static-bond0-custom:
    external: true

Ja, das mache ich in einigen meiner YAML-Skripte. Funktioniert das Hinzufügen des Bonded-Ports über YAML dann nicht richtig?

Ich kann das Setup mit bond0 verwenden und die Docker-App funktioniert dann auch. Es richtet das Netzwerk so ein, dass die Network&Switch-App im NAS-GUI es nicht korrekt anzeigen kann, was später zu Problemen führt, wenn man die Adaptereinstellungen ändern muss. Die Docker-App wird in der Network&Switch-App außerdem mit einer Warnung über einen fehlenden Adapter angezeigt. Damit alles funktioniert, habe ich letztendlich einfach eth0 für die Erstellung des Docker-Netzwerks verwendet und alles läuft wie erwartet.

Ich weiß nicht, ob das Problem mit Network&Switch daran liegt, dass diese Variante nicht programmiert wurde oder woran es sonst liegt.

Auch wenn das NAS bond0 unterstützt, scheint es so, dass nicht alle Apps es korrekt nutzen. Im Laufe der Zeit habe ich viele Tickets eröffnet, um QNAP dazu zu bringen, die Nutzung des bond0-Netzwerks zu beheben.

Hallo, vielen Dank für Ihr Feedback! Ich werde dies an unser internes Team weiterleiten, damit sie es prüfen und eine Analyse durchführen. Vielen Dank!