HOWTO · Docker
Fügen Sie einen Netzwerkmodus in Docker Compose hinzu
In diesem Artikel wird erläutert, wie wir unser Netzwerk mithilfe des Netzwerkmodus in Docker Compose definieren und einrichten können.
Auf dieser Seite
Setzen Sie network_mode beim jeweiligen Dienst in der Compose-Datei. Wählen Sie diese Einstellung, wenn der Dienst einen bestimmten Netzwerk-Namespace verwenden soll. Wenn Sie network_mode weglassen und networks nicht anpassen, verbindet Docker Compose den Dienst mit dem Standardnetzwerk des Projekts. Dort können Dienste einander über ihren Dienstnamen erreichen. Ein eigener Netzwerkmodus ist nicht erforderlich, um die Kommunikation zwischen Diensten zu ermöglichen. Das Compose-Netzwerkhandbuch erläutert das Standardnetzwerk eines Projekts.
Docker-Netzwerkmodus für einen Compose-Dienst auswählen
Wählen Sie den Modus danach aus, welchen Netzwerk-Namespace der Dienst verwenden soll:
bridgeverwendet das integrierte Standard-Bridge-Netzwerk von Docker. Damit wird weder ein benanntes Netzwerk noch das Standardnetzwerk des Compose-Projekts ausgewählt. Benötigt ein Dienst ein benanntes Compose-Netzwerk, konfigurieren Sie es stattdessen mitnetworks.hostverwendet, sofern unterstützt, den Netzwerk-Namespace des Hosts. Dadurch ändert sich die Netzwerkisolierung des Dienstes.nonedeaktiviert die Netzwerkverbindung des Dienstes.service:<service-name>verwendet den Netzwerk-Namespace eines anderen Compose-Dienstes gemeinsam.container:<container-name-or-id>verweist auf einen Docker-Container.
Diese Modi unterscheiden sich hinsichtlich Konnektivität und Isolation. Setzen Sie insbesondere nicht gleichzeitig network_mode und networks für denselben Dienst; Compose behandelt sie als gegenseitig ausschließende Optionen. Die Referenz zu Compose-Diensten beschreibt network_mode; die separate Einstellung für die Netzwerkanbindung wird in der Referenz zu networks bei Diensten erläutert. Die folgenden Beispiele zeigen die Konfigurationssyntax; sie wurden nicht mit einer Docker Engine ausgeführt.
network_mode in Docker Compose konfigurieren
Fügen Sie network_mode innerhalb des jeweiligen Diensteintrags ein und verwenden Sie einen wörtlichen Modus oder eine der Referenzformen. Ein Dienst namens app, der den Host-Modus verwendet, wird beispielsweise durch die eingerückten Zeilen services:, app: und network_mode: host dargestellt. Übernehmen Sie in einer tatsächlichen Compose-Datei die Einrückung und ergänzen Sie die weiteren erforderlichen Einstellungen des Dienstes, etwa sein Image.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
service = "app"
mode = "host"
print(f"services:\n {service}:\n network_mode: {mode}")
services:
app:
network_mode: host
Ersetzen Sie host je nach Bedarf durch bridge, none, service:<service-name> oder container:<container-name-or-id>. Die Angaben in spitzen Klammern sind Platzhalter: Verwenden Sie nach service: den tatsächlichen Namen des Compose-Dienstes und nach container: den Namen oder die ID eines Containers. Beispielsweise verweist service:api auf einen Dienst namens api; der Name oder die ID eines Docker-Netzwerks ersetzt keine dieser beiden Referenzen.
docker network ls listet Docker-Netzwerke mit ihren Namen und IDs auf. Der Befehl listet weder Container noch Compose-Dienste auf. Seine Ausgabe liefert daher keinen Wert für service: oder container:. Verwenden Sie ihn, um verfügbare Netzwerke einzusehen, nicht um Dienst- oder Containerkennungen zu ermitteln. Der Name oder die ID eines Netzwerks ist für sich genommen keine network_mode-Referenz in den oben genannten Formen.
Fügen Sie auf der obersten Ebene der Compose-Datei kein version-Feld hinzu, nur um network_mode zu aktivieren. Die aktuelle Referenz zu Compose-Version und -Name bezeichnet das oberste version-Feld als veraltet; Compose prüft eine Datei anhand des unterstützten Compose-Formats.
Docker-Swarm-Netzwerke berücksichtigen
Die oben beschriebene Compose-Diensteinstellung und die Dienstnetzwerke in Docker Swarm sind getrennte Konfigurationswege. Beim bereitgestellten Swarm-Muster wird ein Dienst über den Schlüssel networks angebunden und ein bereits vorhandenes Netzwerk als extern deklariert. In Compose-Syntax enthält dieses Muster beispielsweise einen Diensteintrag wie app: networks: [host] sowie auf oberster Ebene einen networks-Eintrag, der host benennt und external: true setzt. Ersetzen Sie host durch den tatsächlichen Namen des externen Netzwerks. Dadurch wird der Dienst an ein Netzwerk angebunden; networks wird dadurch weder mit network_mode austauschbar noch ist damit belegt, dass ein Netzwerk mit jedem Modus kompatibel ist. Das Compose-Netzwerkhandbuch erläutert die Netzwerkanbindung in Compose. Erstellen oder ermitteln Sie ein externes Netzwerk mithilfe der Swarm-Konfiguration Ihrer Bereitstellung, bevor Sie darauf verweisen.
Ausgewählten Netzwerkmodus überprüfen
Prüfen Sie die Compose-Datei: network_mode muss unter dem vorgesehenen Dienst stehen, der Wert muss zur gewünschten Modusform passen, und jeder referenzierte Dienst oder Container muss in der Umgebung vorhanden sein, in der der Dienst ausgeführt wird. Prüfen Sie bei Swarm, ob das externe Netzwerk existiert und der Dienst unter networks exakt dessen Namen verwendet. docker network ls kann auf dem Docker-Host, auf dem der Befehl ausgeführt wird, Netzwerknamen und IDs anzeigen. Der Befehl prüft jedoch weder, ob eine Compose-Datei gültig ist, noch ob ein Dienst kommunizieren kann. Dieser Artikel behauptet nicht, dass die Konfigurationen mit einer laufenden Docker-Installation getestet wurden.