Direkt zum Hauptinhalt

Netzwerke

In Docker gibt es mehrere Möglichkeiten, um Container untereinander zu vernetzen und/oder mit der Außenwelt.

Container verbinden

Um Container untereinander auf dem Docker Host zu vernetzen, ist eine Möglichkeit ein eigenes Netzwerk vom Typ Bridge zu erstellen. Dazu kann folgender Befehl genutzt werden.

sudo docker network create mein-netzwerk

Anschließend können Container mit folgendem Befehl zu diesem Netzwerk hinzugefügt werden.

sudo docker network connect mein-netzwerk mein-container

Es können laufende Container zum Netzwerk hinzugefügt werden, hierfür müssen die Container nicht gestoppt werden. Auch das Entfernen funktioniert ohne Container Neustart.

Um einen Container wieder aus einem Netzwerk zu entfernen, kann der folgende Befehl verwendet werden.

sudo docker network disconnect mein-netzwerk mein-container

Wird ein Netzwerk nicht mehr benötigt, lässt es sich mit folgendem Befehl entfernen.

sudo docker network rm mein-netzwerk

Wenn mit Docker Compose Container verwaltet werden, dann wird automatisch immer ein Default Netzwerk erstellt, in das alle Container aus der Compose Konfiguration eingefügt werden. Ausnahme: wenn Container in der Compose Konfiguration explizit einem Netzwerk zugewiesen werden, dann werden diese nicht dem Default Netzwerk zugewiesen.

Compose Container verbinden

Wenn die Container aus verschiedenen Docker Compose Konfigurationen miteinander verbunden werden sollen, dann wird am besten mit den oben genannten Befehlen ein extra Netzwerk erstellt.

Erstellen wir beispielweise das Netzwerk testnet.

sudo docker network create testnet

Anschließend werden die gewünschten Konfigurationen wie folgt ergänzt.

Docker Compose A:

services:
  webserver-A:
    image: nginx
    networks:
      - testnet
networks:
  testnet:
    name: testnet
    external: true

Docker Compose B:

services:
  webserver-B:
    image: nginx
    networks:
      - testnet
networks:
  testnet:
    name: testnet
    external: true

Anschließend die beiden Konfigurationen neu starten und nun wären Webserver-A und Webserver-B in einem Netzwerk und könnten miteinander über den Docker Socket kommunizieren. Die Kommunikation läuft hierbei im virtuellen Docker Netzwerk ab und verlässt nicht den Host. Dadurch ist diese Verbindung besonders schnell und sicher.