Linux Docker Container und physikalische Netzwerk

Wenn man Linux Docker Container im Netzwerk für andere erreichbar machen möchte, muss man im Grunde nur ein paar Schritte durchführen. In meinem Setup hängt ein Linux Server (OpenSuse Leap 15.1, im eigenen Blech) direkt an meinem Router. Und mein Rechner von dem ich per SSH den Docker Host auf dem Linux Server verwalte.

Im ersten Schritt sollte man überprüfen ob das Netzwerk-Device auf dem Linux Server mehrere MAC-Adressen unterstützt. Das wird Promiscuous mode genannt und man kann das einfach in der Konfigurationsdatei (/etc/sysconfig/network/ifcfg-eth0) eingerichtet. Einfach den Parameter PROMISC=yes hinzugfügen und das Netzwerk-Device durchstarten.

Nächster Schritt ist es ein Netzwerk in Docker einrichten, welches Pakete nach außen „überbrückt“. Standardmäßig hat Docker ein „bridge“ Netzwerk vorkonfiguriert, dieses überbrückt aber nur die Verbindungen zwischen den Containern und nicht nach außen. In meinem Beispiel erzeuge ich ein macvlan Netzwerk mit diesem Befehl:

docker network create -d macvlan \
--subnet=192.168.2.1/24 \
--gateway=192.168.2.1 \
-o parent=eth0 \
macvlan

Alle Container die man nun mit diesem Docker Netzwerk verbindet, erhalten von dieser Netzwerk Konfiguration eine IP Adresse zugewiesen. Achtung hier wird nicht der DHCP Server von meinem Netzwerk. Ich habe leider noch keine funktionierende Variante für DHCP gefunden. Wenn ich jetzt hergehe und einen Container vom MYSQL Image mit diesem Netzwerk starte

docker run -p 3306:3306 --network=macvlan --name mysql -h mysql -e MYSQL_ROOT_PASSWORD=MyPassword -d mysql

-p ist der Port des Containers
–network ist das Name des gerade erzeugten Docker Netzwerk
–name ist der Name des Containers
-e MYSQL_ROOT_PASSWORD ist das root Passwort der Instanz

Erhält der Container die IP 192.168.2.2 und ich kann die Instanz von meinem Lokalen Rechner aus ansprechen.

Bei Docker für Windows läuft die Netzwerk Einrichtung etwas anders, hierzu werde ich aber in den kommenden Tagen auch noch einen Post schreiben. Sonst vergesse ich das bestimmt auch wieder 🙂

http://www.agile-coding.net/linux-docker-container-und-physikalische-netzwerk/