Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Mikrocontroller
    • Arduino
    • ESP32 & Co.
    • Calliope Mini
    • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Docker-Container erreichen sich nicht? So löst du das Netzwerkproblem

Veröffentlicht am 18. Mai 202618. Mai 2026 von Stefan Draeger

Mit Docker lassen sich mehrere Dienste wie Mosquitto, Node-RED, Nginx oder Datenbanken schnell als eigene Container starten. Spannend wird es jedoch, sobald diese Container miteinander kommunizieren sollen.

Ein häufiger Fehler ist dabei, nur auf die IP-Adresse des Containers zu schauen. Unterschiedliche IP-Bereiche können zwar ein Hinweis auf unterschiedliche Docker-Netzwerke sein, entscheidend ist aber: In welchem Netzwerk hängt der Container wirklich?

Docker bringt standardmäßig das Netzwerk bridge mit. Wird ein Container ohne eigene Netzwerkangabe erstellt, landet er meist dort. Wird er später mit docker start erneut gestartet, bekommt er keine neue Netzwerkkonfiguration, sondern verwendet weiterhin die ursprüngliche.

Für einfache Tests kann das funktionieren. Für saubere Setups ist jedoch ein eigenes Docker-Netzwerk oder Docker Compose meist die bessere Lösung.

Docker-Container erreichen sich nicht? So löst du das Netzwerkproblem
Dieses Video auf YouTube ansehen.

In diesem Beitrag zeige ich dir anhand von Node-RED und Mosquitto, wie du das Netzwerk deiner Container prüfst und sie sauber miteinander verbindest.

Inhaltsverzeichnis

  • Ausgangslage: Zwei Container, aber unterschiedliche Netzwerke
    • Container-ID und Namen der Container ermitteln
  • Docker-Netzwerk erstellen
  • Container mit dem Docker-Netzwerk verbinden
  • Container wieder aus dem Docker-Netzwerk entfernen
  • Docker Compose Variante
  • Fazit

Ausgangslage: Zwei Container, aber unterschiedliche Netzwerke

In meinem Beispiel laufen zwei Dienste als Docker-Container. Zum einen Node-RED für die Automatisierung und Verarbeitung der Daten, zum anderen Mosquitto als MQTT-Broker.

Beide Container wurden erfolgreich gestartet und sind vom Host-System aus erreichbar. Node-RED lässt sich zum Beispiel über den Browser öffnen, und auch der Mosquitto-Broker läuft grundsätzlich. Auf den ersten Blick sieht also alles korrekt aus.

Beim Blick auf die internen Docker-IP-Adressen zeigt sich jedoch ein wichtiger Unterschied:

Docker - zugewiesene IP-Adressen der gestarteten Container
Docker – zugewiesene IP-Adressen der gestarteten Container

Mosquitto läuft in diesem Beispiel unter der IP-Adresse 172.19.0.2, während Node-RED die IP-Adresse 172.18.0.2 erhalten hat. Die unterschiedlichen IP-Bereiche sind ein deutlicher Hinweis darauf, dass beide Container nicht im selben Docker-Netzwerk hängen. Sicher prüfen lässt sich das jedoch erst über die tatsächliche Netzwerkzuordnung des Containers.

$ docker inspect -f '{{range $name, $network := .NetworkSettings.Networks}}{{println $name $network.IPAddress}}{{end}}' nodered
bridge 172.17.0.3

$ docker inspect -f '{{range $name, $network := .NetworkSettings.Networks}}{{println $name $network.IPAddress}}{{end}}' mosquitto
bridge 172.17.0.2

Genau hier liegt das Problem: Nur weil beide Container vom PC aus erreichbar sind, bedeutet das nicht automatisch, dass sie auch untereinander kommunizieren können.

Der Host-Rechner kann die Container über veröffentlichte Ports erreichen, zum Beispiel Node-RED über den Browser oder Mosquitto über den MQTT-Port. Die direkte Kommunikation zwischen zwei Containern läuft jedoch über das Docker-Netzwerk. Befinden sich die Container nicht im selben Netzwerk, kann Node-RED den Mosquitto-Broker nicht ohne Weiteres erreichen.

In meinem Fall war genau das die Ursache: Beide Dienste liefen korrekt, aber Node-RED konnte keine Verbindung zum Mosquitto-Broker aufbauen, weil beide Container in unterschiedlichen Docker-Netzwerken gestartet wurden.

Container-ID und Namen der Container ermitteln

Bevor die interne IP-Adresse eines Docker-Containers ausgelesen werden kann, muss zunächst bekannt sein, wie der Container heißt. Alternativ kann auch die Container-ID verwendet werden.

Damit die Ausgabe von Docker übersichtlich bleibt, kann man sich mit folgendem Befehl nur die Container-ID und den Namen anzeigen lassen:

docker ps --format "table {{.ID}}\t{{.Names}}"

Die Ausgabe sieht dann zum Beispiel so aus:

Ausgabe der Container ID und Names der Docker Container
Ausgabe der Container ID und Names der Docker Container

In diesem Beispiel heißt der Node-RED-Container nodered und der Mosquitto-Container mosquitto. Diese Namen können anschließend direkt für den docker inspect-Befehl verwendet werden.

Die IP-Adresse des Node-RED-Containers lässt sich zum Beispiel so auslesen:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nodered

Für den Mosquitto-Container entsprechend:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mosquitto

Alternativ kann statt des Containernamens auch die Container-ID verwendet werden. In der Praxis ist der Name jedoch meist deutlich lesbarer und einfacher zu merken.

Docker-Netzwerk erstellen

Damit sich die Container gegenseitig erreichen können, erstellen wir zuerst ein eigenes Docker-Netzwerk. In meinem Beispiel verwende ich den Namen iot-net.

Der Befehl dazu lautet:

docker network create iot-net
Docker Netzwerk erstellt
Docker Netzwerk erstellt

Damit legt Docker ein neues benutzerdefiniertes Netzwerk an. Der Name iot-net ist frei gewählt und kann natürlich angepasst werden.

Nach dem Erstellen müssen die gewünschten Container noch mit diesem Netzwerk verbunden werden.

Container mit dem Docker-Netzwerk verbinden

Nun verbinden wir beide Services mit dem zuvor erstellten Netzwerk iot-net. In meinem Beispiel heißen die Container nodered und mosquitto.

Docker Container zu einem Netzwerk verbunden
Docker Container zu einem Netzwerk verbunden

Dazu werden folgende Befehle ausgeführt:

docker network connect iot-net nodered
docker network connect iot-net mosquitto

Damit werden beide bereits laufenden Container zusätzlich mit dem Docker-Netzwerk iot-net verbunden.

Anschließend kann geprüft werden, ob beide Container wirklich im Netzwerk vorhanden sind:

docker network inspect iot-net --format '{{range .Containers}}{{.Name}} {{.IPv4Address}}{{println}}{{end}}'

Die Ausgabe sieht in meinem Fall so aus:

mosquitto 172.21.0.3/16
nodered 172.21.0.2/16

Jetzt befinden sich beide Container im selben Docker-Netzwerk und können sich darüber gegenseitig erreichen. Wichtig ist dabei nicht mehr die direkte IP-Adresse, sondern der Containername. Node-RED kann Mosquitto nun also über den Namen mosquitto und den Port 1883 ansprechen.

Container wieder aus dem Docker-Netzwerk entfernen

Falls ein Container später nicht mehr Teil des Netzwerks sein soll, kann die Verbindung wieder getrennt werden. Der Container selbst wird dabei nicht gelöscht, sondern nur vom Netzwerk iot-net entfernt.

Für Node-RED:

docker network disconnect iot-net nodered

Für Mosquitto:

docker network disconnect iot-net mosquitto

Anschließend kann wieder geprüft werden, ob noch Container mit dem Netzwerk verbunden sind:

docker network inspect iot-net --format '{{range .Containers}}{{.Name}} {{.IPv4Address}}{{println}}{{end}}'

Wenn keine Ausgabe mehr erscheint, sind keine Container mehr mit diesem Netzwerk verbunden.

Nun kann das Docker-Netzwerk vollständig gelöscht werden:

docker network rm iot-net

Wichtig: Ein Docker-Netzwerk kann nur gelöscht werden, wenn keine Container mehr damit verbunden sind. Falls Docker hier eine Fehlermeldung ausgibt, sollte zuerst geprüft werden, welche Container noch im Netzwerk hängen.

Container aus dem Docker-Netzwerk entfernen
Container aus dem Docker-Netzwerk entfernen

Docker Compose Variante

Wenn Node-RED und Mosquitto dauerhaft gemeinsam betrieben werden sollen, ist Docker Compose meist die bessere Lösung. Der große Vorteil: Das Netzwerk kann direkt in der docker-compose.yml definiert werden. Dadurch muss man die Container nicht nachträglich per docker network connect miteinander verbinden.

Ein einfaches Beispiel könnte so aussehen:

services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto
    ports:
      - "1883:1883"
    networks:
      - iot-net

  nodered:
    image: nodered/node-red
    container_name: nodered
    ports:
      - "1880:1880"
    volumes:
      - node_red_data:/data
    networks:
      - iot-net

volumes:
  node_red_data:

networks:
  iot-net:
    name: iot-net
    driver: bridge

Gestartet wird das Setup anschließend mit:

docker compose up -d

oder wenn du den Dateinamen angepasst hast:

docker compose -f docker-compose-nodered_mosquitto.yml up -d

Docker Compose - Container via YAML im selben Netzwerk starten
Docker Compose – Container via YAML im selben Netzwerk starten

Docker Compose erstellt nun automatisch das Netzwerk iot-net und verbindet beide Container damit. Dadurch befinden sich Node-RED und Mosquitto direkt im selben Docker-Netzwerk.

Innerhalb von Node-RED wird als MQTT-Broker dann nicht die IP-Adresse des Mosquitto-Containers eingetragen, sondern einfach der Servicename bzw. Containername: mosquitto

Der Port bleibt: 1883

Also lautet die Verbindung in Node-RED: mosquitto:1883

Node-RED verbindung zu Mosquitto
Node-RED verbindung zu Mosquitto

Der Vorteil dieser Lösung ist, dass Docker Compose das Netzwerk bei jedem Start automatisch korrekt einrichtet. Dadurch entfällt das manuelle Erstellen und Verbinden per docker network create und docker network connect.

Fazit

Wenn sich Docker-Container nicht gegenseitig erreichen, liegt die Ursache häufig nicht an der Anwendung selbst, sondern am verwendeten Docker-Netzwerk. Interne IP-Adressen wie 172.18.0.2 oder 172.19.0.2 wirken zwar auf den ersten Blick eindeutig, sind für die Kommunikation zwischen Containern aber oft nicht die beste Lösung.

Wichtiger ist, dass sich die betreffenden Container im selben Docker-Netzwerk befinden. Erst dann können sie sich zuverlässig untereinander erreichen – idealerweise über ihren Container- oder Servicenamen statt über eine feste IP-Adresse.

Für schnelle Tests lässt sich ein gemeinsames Netzwerk bequem per docker network create und docker network connect aufbauen. Wer mehrere Dienste dauerhaft betreibt, fährt mit Docker Compose meist noch besser, da sich Netzwerk, Container und Ports direkt in einer zentralen Datei definieren lassen.

Am Ende gilt also: Nicht die IP-Adresse ist entscheidend, sondern das richtige Docker-Netzwerk. Ist dieses sauber eingerichtet, funktioniert auch die Kommunikation zwischen den Containern zuverlässig.

Letzte Aktualisierung am: 18. Mai 2026

Foto von Stefan Draeger
Über den Autor

Stefan Draeger — Entwickler & Tech-Blogger

Ich zeige praxisnah, wie du Projekte mit Arduino, ESP32 und Smarthome-Komponenten umsetzt – Schritt für Schritt, mit Code und Schaltplänen.

Mehr Artikel von Stefan →

Schreibe einen Kommentar Antwort abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • QR-Code Generator
  • Passwort Generator: Sichere Passwörter & Passphrasen erstellen
  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 015565432686
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2026 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
  • Optionen verwalten
  • Dienste verwalten
  • Verwalten von {vendor_count}-Lieferanten
  • Lese mehr über diese Zwecke
Einstellungen anzeigen
  • {title}
  • {title}
  • {title}