Networking

Du befindest dich hier:

Ein Kurzer Exkurs in die Welt der Docker Netzwerke…

Es gibt viele Wege einen Docker-Container über das Netzwerk erreichbar zu machen. Die drei, für meine Tutorials relevanten Möglichkeiten werde ich im Folgenden kurz, und sehr vereinfacht, umreißen. Für detailliertere und tiefer gehende Informationen empfehle ich die offizielle Dokumentation zu Docker.

Der Standard: Netzwerkbrücke

Der Standard in Docker ist die einfache Netzwerkbrücke (Bridged Networking). Dabei wird innerhalb von Docker ein virtuelles Neztwerk erzeugt, in dem der oder die Container mit einer eigenen IP-Adresse, abgeschottet vom physikalischen Heimnetzwerk, kommunizieren können. Um einen Container bzw. einen Dienst der im Container läuft aus dem Heimnetzwerk erreichbar zu machen muss eine Brücke zwischen den Netzwerken erstellt werden. Um eine Brücke zu erstellen, reicht es einen Port vom Heimnetzwerk zum Container durch zu reichen (Stichwort: „EXPOSE“).

Einfaches praktisches Beispiel: Ein Webserver im Container. Der Webserver-Dienst im Container ist im virtuellen Docker-Netzwerk über Port 80 erreichbar. Um ihn aus dem Heimnetzwerk erreichbar zu machen, reichen wir den Port 80 vom Docker-Host (PC/ Server/ DS auf der Docker läuft) zum Container durch. Danach ist der Webserver über die IP-Adresse und den Namen des Docker-Hosts plus Port 80 erreichbar. Der Docker-Host-Port muss dabei nicht zwingend dem Container-Port entsprechen. Man kann ebenso den Host-Port 8080 auf den Container-Port 80 durchreichen. Die Konfiguration dessen erfolgt dabei stets in den Einstellungen des Containers.

Das Einfachste: Selbes Netzwerk wie Host verwenden

Der Weg des geringsten Widerstands ist die Option „Selbes Netzwerk wie Host verwenden“. Dabei wird der Container wie eine Applikation auf dem Docker-Host behandelt und öffnet alle im Container konfigurierten Ports automatisch 1:1 ins Heimnetzwerk. Für den Standard-Anwender eine einfache und unkomplizierte Lösung. Vor allem wenn im Container, wie bei ioBroker, viele verschiedene Ports verwendet werden.

Kleiner Nachteil: Sind die vom Container verwendeten Ports bereits vom Host belegt, kann der Container diese nicht mehr verwenden und die Ausführung schlägt fehl.

Im Hinblick auf die Verwendung des aktuellen ioBroker-Docker-Images und der aktuellen Synology-DSM-Version ist diese Option allerdings aktuell nicht möglich. Ein Bug in der verwendeten Version des Linux-Kernels verhindert ein Ausführen von „sudo“ innerhalb des Containers. Seit der Änderung der Installationsroutine von ioBroker wird „sudo“ aber zwingend benötigt. Bis zur Aktualisierung der Kernel-Version im DSM wird diese Einschränkung wohl auch bestehen bleiben. Andere Systeme (z.B. ein Debian Server) sind, sofern eine aktuelle Kernel-Version verwendet wird, nicht betroffen. Hier kann der Host-Mode verwendet werden.

Für Fortgeschrittene: MACVLAN-Methode

Um den ioBroker im Heimnetzwerk über eine eigene IP-Adresse, unabhängig vom Docker-Host, ansprechen zu können (ähnlich wie es bei Verwendung eine Raspberry-Images der Fall ist) bleibt nur die Verwendung von MACVLAN. Dabei wird auf die Netzwerkschnittstelle des Docker-Hosts virtuell eine einzelne IP-Adresse oder ein ganzer IP-Adressbereich gelegt und 1:1 an den oder die Container durchgereicht. Die Netzwerkschnittstelle des Docker-Hosts bekommt also zusätzliche IP-Adressen verpasst, die unabhängig aus dem Heimnetz angesprochen werden können. Das Durchreichen der Ports entfällt ebenso wie bei Verwendung des Host-Netzwerks.

Trotzdem gibt es einen Wermutstropfen: Eine direkte Kommunikation zwischen der IP-Adresse des ioBrokers und der des Docker-Hosts ist leider nicht möglich. Praktisches Beispiel ist hier z. B. die Anbindung einer auf dem Host laufenden SQL-Datenbank an den ioBroker-Container. In so einem Fall müssen andere Lösungen gefunden werden.

Wie ihr seht ist das Thema Netzwerk unter Docker nicht ganz trivial. Ich empfehle daher jedem sich ausgiebig damit auseinander zu setzen. Nicht alles ist immer möglich möglich. Auh hier gibt es jeweils Vor- und Nachteile….
Bei konkreten Fragen steht euch wie immer die Kommentarfunktion zur Verfügung. Ich gebe mein Bestes alle Fragen zeitnah zu beantworten. Auch hier gilt: Bitte seht davon ab mich persönlich zu kontaktieren. Ich kann leider keinen individuellen Support anbieten. Vielen Dank für euer Verständnis.

Zuletzt aktualisiert: Mai 07, 2019

About the author: André

André
Familienvater und bekennender Technik-Nerd. Beruflich unterwegs als Fachinformatiker für Systemintegration bei einem deutschen IT-Dienstleister. In der Freizeit begeisterter "Home-Automatisierer" bzw. "Smarthome-Bastler" und (zumindest bei schönem Wetter) gerne mit der Familie in verschiedenen Outdooraktivitäten unterwegs.

Leave a Reply

Your email address will not be published.