Die Verwendung von Docker zur Virtualisierung bietet viele Vorteile. Man kann aber auf unvorhergesehene Probleme stoßen. In einem Setup mit Docker auf einem Raspberry PI wurde mir die IP-Adresse des Host-Systems zum Verhängnis.
Setup
Verwendet wurde ein Raspberry Pi 5 – darauf läuft die Docker Engine welche eine Spring Boot Anwendung kapselt um Druck-Aufträge an einen Bon-Drucker zu schicken. Die API dafür läuft im Internet – der Raspberry Pi benötigt also eine Internetverbindung über das Netzwerk.
Das funktioniert auch ohne Probleme. Jedoch ist man abhängig vom IP-Bereich der im Netzwerk verwendet wird. Wird hier der IP Bereich 172.17.0.x verwendet kann es sein, dass nichts mehr geht.
Auswirkung
Verwendest das Netzwerk in dem der Raspberry PI hängt den IP Bereich 172.17.0.x kommt es zu Fehlern in der DNS Auflösung. Das muss nicht konsistent sein – manche gecachte DNS-Names funktioniert evt., andere nicht.
In meinem Fall funktionierte Docker PULL ohne Probleme. Das Java Programm konnte aber in der weiteren Folge den DNS-Name der API nicht auflösen.
Es folgten Stunden der Fehlersuche bzgl. DNS Konfigruation auf dem Raspi und im Docker Container.
Das Problem
Das eig. Problem versteckt sich innerhalb von Docker. Nach einigen Stunden Suche habe ich plötzlich in einem Docker-Config File welches unberührt war die IP Adresse 172.17.0.x gefunden. Da war dann klar, dass dieser IP Bereich innerhalb von Docker auch eine Rolle spielt. Und in der Tat – Docker verwendet INTERN standarmäßig diesen IP-Bereich. Es kommt somit zu einem Clash der IP-Bereiche und das System funktioniert nicht mehr verlässlich.
Die Lösung
Ist das Problem erstmal erkannt, ist die Lösung relativ einfach. Über das File /etc/docker/daemon.json am Raspi kann Docker so konfiguriert werden, dass es einen anderen IP Bereich intern verwendet. Damit ist das Problem sofort behoben.
/etc/docker/daemon.json
{
"default-address-pools": [
{
"base": "10.17.0.1/16",
"size": 24
}
]
}
Schreibe einen Kommentar