Die Kombination aus Pi-hole, Docker und Portainer ist für viele Heim-Admins und Technikbegeisterte ein wahrer Segen. Sie ermöglicht eine effiziente Verwaltung von Containern, eine systemweite Werbeblockierung und DNS-Verwaltung – alles auf einem einzigen, oft ressourcenschonenden System wie einem Raspberry Pi oder einem Mini-PC. Doch so mächtig dieses Trio auch ist, so frustrierend kann es sein, wenn das sorgfältig aufgesetzte System plötzlich nicht mehr erreichbar ist. Sie haben alles eingerichtet, die Container laufen scheinbar, aber weder das Pi-hole Webinterface, noch Portainer oder gar die DNS-Funktionalität sind zugänglich. Klingt bekannt?
Sie sind nicht allein. Das „Fehler-Trio”, wie wir es nennen, entsteht oft durch eine komplexe Interaktion von Netzwerkkonfigurationen, Docker-internen Prozessen und spezifischen Anforderungen der Anwendungen. In diesem umfassenden Guide tauchen wir tief in die häufigsten Ursachen für diese Erreichbarkeitsprobleme ein und zeigen Ihnen Schritt für Schritt, wie Sie Ihr Setup diagnostizieren und erfolgreich wiederbeleben können. Schnappen Sie sich einen Kaffee, denn wir werden das Problem gemeinsam von Grund auf lösen.
Die Wurzel des Übels: Das Fehler-Trio verstehen
Bevor wir mit der Fehlersuche beginnen, ist es wichtig zu verstehen, warum diese drei Komponenten – Pi-hole, Docker und Portainer – so anfällig für Erreichbarkeitsprobleme sind, wenn sie zusammenarbeiten. Jede Komponente hat ihre eigenen Netzwerkbedürfnisse und Eigenheiten:
- Pi-hole: Ein DNS-Server, der auf Port 53 (UDP/TCP) lauscht und ein Webinterface auf Port 80 (HTTP) oder 443 (HTTPS) benötigt. Es muss als primärer DNS-Server im Netzwerk fungieren.
- Docker: Erstellt isolierte Netzwerke für Container und leitet Ports vom Host zum Container weiter. Dies kann zu Konflikten mit bereits belegten Ports oder unerwartetem Verhalten führen.
- Portainer: Ein Webinterface, das standardmäßig auf Port 9000 (HTTP) oder 9443 (HTTPS) läuft und eine Verbindung zum Docker-Daemon benötigt, um Container zu verwalten.
Die Komplexität entsteht, wenn diese Komponenten um dieselben Ressourcen (insbesondere Netzwerk-Ports) konkurrieren oder wenn die Netzwerkregeln des Host-Systems, des Routers oder sogar Docker selbst nicht korrekt konfiguriert sind. Die häufigsten Problemfelder lassen sich in drei Kategorien unterteilen:
- Netzwerkkonfigurationen: Die Königsklasse der Probleme. Firewall, Portkonflikte, DNS-Einstellungen und Docker-Netzwerkmodi.
- Docker-spezifische Probleme: Container starten nicht, falsche Konfiguration innerhalb der Container, Volume-Probleme.
- Anwendungsspezifische Probleme: Pi-hole oder Portainer selbst haben interne Fehler oder sind falsch konfiguriert.
Schritt 1: Die Grundlagen prüfen – Läuft überhaupt etwas?
Beginnen wir mit den einfachsten, aber oft übersehenen Schritten. Manchmal ist die Lösung näher, als man denkt.
1. Ist Docker aktiv und läuft?
Zuerst sollten Sie sicherstellen, dass der Docker-Dienst auf Ihrem Host-System (z.B. Raspberry Pi OS, Ubuntu Server) überhaupt läuft. Ohne einen aktiven Docker-Daemon kann kein Container funktionieren.
sudo systemctl status docker
Die Ausgabe sollte „Active: active (running)” anzeigen. Wenn nicht, starten Sie ihn mit:
sudo systemctl start docker
Und stellen Sie sicher, dass er beim Booten automatisch startet:
sudo systemctl enable docker
2. Laufen Ihre Container?
Selbst wenn Docker aktiv ist, bedeutet das nicht, dass Ihre Container reibungslos laufen. Überprüfen Sie den Status Ihrer Pi-hole- und Portainer-Container:
docker ps -a
Diese Liste zeigt alle Container, auch die gestoppten. Achten Sie auf den Status (Up ...
bedeutet läuft, Exited ...
bedeutet beendet). Wenn ein Container nicht läuft, notieren Sie den Namen.
3. Container-Logs prüfen
Wenn ein Container nicht startet oder abstürzt, sind die Logs Ihr bester Freund. Überprüfen Sie die Logs für Pi-hole und Portainer (und gegebenenfalls den Portainer-Agent, falls verwendet):
docker logs pihole
docker logs portainer
Suchen Sie nach Fehlermeldungen, insbesondere nach solchen, die auf Portkonflikte, fehlende Dateien oder Berechtigungsprobleme hinweisen.
Schritt 2: Tiefenbohrung ins Netzwerk – Die häufigste Fehlerquelle
Die meisten Probleme mit der Erreichbarkeit liegen im Netzwerk begründet. Hier müssen wir methodisch vorgehen.
1. Host-Firewall (ufw, iptables)
Eine falsch konfigurierte Firewall auf Ihrem Host-System ist ein klassischer Übeltäter. Überprüfen Sie, ob Ports blockiert werden, die Pi-hole (53 UDP/TCP, 80 TCP, 443 TCP) und Portainer (9000 TCP, 9443 TCP) benötigen.
sudo ufw status verbose
Stellen Sie sicher, dass die benötigten Ports für den Zugriff von externen Clients freigegeben sind. Falls nicht, fügen Sie die Regeln hinzu (Beispiel für Pi-hole und Portainer):
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 9000/tcp
sudo ufw allow 9443/tcp
sudo ufw reload
Wenn Sie ufw
nicht verwenden, prüfen Sie Ihre iptables
-Regeln. Docker verwaltet seine eigenen iptables
-Regeln, aber die Host-Firewall kann dennoch den externen Zugriff blockieren.
2. Portkonflikte auf dem Host
Verwendet eine andere Anwendung auf Ihrem Host-System bereits einen der kritischen Ports (53, 80, 443, 9000, 9443)? Wenn ja, kann Docker den Port nicht binden.
sudo netstat -tulpn | grep -E "53|80|443|9000|9443"
Diese Ausgabe zeigt Ihnen, welche Prozesse welche Ports belegen. Wenn Sie sehen, dass ein Prozess wie dnsmasq
oder systemd-resolved
auf Port 53 läuft, müssen Sie diesen deaktivieren, da er mit Pi-hole kollidiert.
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl disable dnsmasq
sudo systemctl stop dnsmasq
Vergessen Sie nicht, dann die Datei /etc/resolv.conf
anzupassen, um sicherzustellen, dass Ihr Host nicht sich selbst als DNS-Server verwendet, wenn Pi-hole noch nicht läuft oder Probleme hat.
3. Docker-Netzwerkkonfiguration
Wie haben Sie Ihre Container mit dem Netzwerk verbunden? Das ist entscheidend. Die gängigsten Modi sind:
- Bridge (Standard): Docker erstellt ein internes Netzwerk und leitet Ports weiter (z.B.
-p 80:80
). - Host: Der Container teilt sich das Netzwerk des Hosts, was bedeutet, dass er direkt auf Host-Ports zugreifen kann, ohne Portweiterleitung. Dies ist oft die einfachste Lösung für Pi-hole, birgt aber das Risiko von Portkonflikten.
- MacVLAN: Weist dem Container eine eigene IP-Adresse im lokalen Netzwerk zu, wodurch er wie ein eigenständiges Gerät erscheint. Komplexer, aber sehr sauber.
Wenn Sie den Bridge-Modus verwenden, stellen Sie sicher, dass die Port-Mappings in Ihrem docker run
-Befehl oder Ihrer docker-compose.yml
korrekt sind. Zum Beispiel für Pi-hole:
version: "3"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp" # Für das Webinterface
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'your_password'
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
# Optional: Geben Sie eine statische IP im Docker-Bridge-Netzwerk an, wenn gewünscht
# networks:
# pihole_network:
# ipv4_address: 172.18.0.2
restart: unless-stopped
# networks:
# pihole_network:
# driver: bridge
# ipam:
# config:
# - subnet: 172.18.0.0/24
Für Portainer (typischerweise im Bridge-Modus, da es keine direkten Netzwerk-Dienste für Clients bereitstellt außer dem UI):
docker run -d -p 8000:8000 -p 9443:9443
--name portainer
--restart always
-v /var/run/docker.sock:/var/run/docker.sock
-v portainer_data:/data
portainer/portainer-ce:latest
Beachten Sie hier die Ports 8000 und 9443. Wenn Portainer über Port 9000 erreichbar sein soll, müssen Sie dies im Befehl anpassen: `-p 9000:9000`. Der interne Port ist immer 9000/9443 für Portainer CE. Das -p HOST_PORT:CONTAINER_PORT
ist entscheidend.
Überprüfen Sie die vom Container verwendeten Netzwerke:
docker inspect <container_name> | grep "IPAddress"
Dies gibt Ihnen die interne IP-Adresse des Containers im Docker-Netzwerk. Diese ist selten direkt von außen erreichbar, aber wichtig für die interne Kommunikation, falls Sie mehrere Container haben.
4. Router-Einstellungen und DNS
Für Pi-hole ist es entscheidend, dass Ihr Router die Pi-hole IP-Adresse als primären DNS-Server an Ihre Clients verteilt. Überprüfen Sie die DHCP-Einstellungen Ihres Routers. Stellen Sie sicher, dass keine anderen DNS-Server (z.B. die Ihres Internetanbieters) vor Pi-hole aufgeführt sind.
Wenn Sie Pi-hole im Host-Modus betreiben und es seine eigene IP-Adresse im Netzwerk hat, ist dies relativ einfach. Wenn Pi-hole in einem Docker-Bridge-Netzwerk läuft, müssen Sie sicherstellen, dass die Host-IP-Adresse als DNS-Server im Router eingetragen ist, und die Portweiterleitung für 53/UDP und 53/TCP von Ihrem Host an den Pi-hole-Container korrekt funktioniert.
Testen Sie die DNS-Auflösung von einem Client aus:
nslookup google.com <pihole_ip>
Dies sollte Ihnen zeigen, ob Pi-hole DNS-Anfragen empfängt und auflösen kann.
Schritt 3: Anwendungsspezifische Diagnosen und Lösungsansätze
Nachdem wir das Netzwerk überprüft haben, konzentrieren wir uns auf Pi-hole und Portainer selbst.
1. Pi-hole spezifische Checks
- Webinterface nicht erreichbar? (oft Port 80/443): Das liegt meist an Portkonflikten (z.B. Apache, Nginx, lighttpd auf dem Host) oder einer falsch konfigurierten Firewall. Pi-hole verwendet standardmäßig
lighttpd
intern. Wenn Sie den Host-Modus für Pi-hole verwenden, stellen Sie sicher, dass kein anderer Webserver auf diesen Ports lauscht. pihole -d
zur Diagnose: Pi-hole hat ein eingebautes Diagnose-Tool, das viele häufige Probleme erkennt. Führen Sie es im Container aus (docker exec pihole pihole -d
) und folgen Sie den Anweisungen.FTL
Status: Der Pi-hole FTL-Daemon (DNS-Resolver) muss laufen. Überprüfen Sie die Container-Logs oder verwenden Siedocker exec pihole pihole status
.- Upstream DNS-Server: Stellen Sie sicher, dass Pi-hole korrekte Upstream-DNS-Server (z.B. Google, Cloudflare, OpenDNS) konfiguriert hat und diese erreichbar sind. Ein
ping 8.8.8.8
vom Host und vom Container (docker exec pihole ping 8.8.8.8
) kann helfen.
2. Portainer spezifische Checks
- Portainer UI nicht erreichbar? (oft Port 9000/9443): Auch hier sind Firewall-Regeln und Portkonflikte die häufigsten Ursachen. Überprüfen Sie, ob ein anderer Dienst auf diesen Ports läuft.
- Docker Socket mounted? Portainer benötigt Zugriff auf den Docker-Daemon-Socket (
/var/run/docker.sock
) auf dem Host, um Container zu verwalten. Stellen Sie sicher, dass dieser Volume-Mount korrekt in Ihremdocker run
-Befehl oderdocker-compose.yml
vorhanden ist:-v /var/run/docker.sock:/var/run/docker.sock
. - Agent-Verbindungsprobleme: Wenn Sie Portainer als Agent in einer Multi-Node-Umgebung verwenden, stellen Sie sicher, dass der Agent-Container läuft, der Port 9001 geöffnet ist und die Kommunikation zwischen dem Portainer-Server und dem Agent-Host nicht durch Firewalls blockiert wird.
Schritt 4: Praktische Lösungsansätze und bewährte Methoden
Nachdem Sie die Diagnose-Schritte durchlaufen haben, können Sie gezielt Maßnahmen ergreifen.
1. Neustart ist Gold
Manchmal lösen einfache Neustarts hartnäckige Probleme. Versuchen Sie nacheinander:
- Neustart der betroffenen Container:
docker restart pihole portainer
- Neustart des Docker-Dienstes:
sudo systemctl restart docker
(alle Container werden kurzzeitig gestoppt und neu gestartet). - Neustart des gesamten Host-Systems.
2. Port-Anpassungen
Wenn Sie Portkonflikte festgestellt haben, passen Sie die Host-Ports an. Wenn beispielsweise Port 80 bereits belegt ist, können Sie Pi-hole auf Port 8080 zugänglich machen (-p 8080:80/tcp
im docker run
oder docker-compose.yml
). Vergessen Sie nicht, dann auch die Firewall entsprechend anzupassen.
3. Firewall-Regeln überprüfen und anpassen
Seien Sie präzise mit Ihren Firewall-Regeln. Öffnen Sie nur die benötigten Ports. Testen Sie nach jeder Änderung die Erreichbarkeit. Führen Sie ggf. ein ufw reset
durch (Vorsicht, dies löscht alle Regeln!) und konfigurieren Sie sie von Grund auf neu.
4. Konsistente DNS-Einstellungen
Stellen Sie sicher, dass Ihre Netzwerk-DNS-Einstellungen (Router, Clients) ausschließlich auf die IP-Adresse Ihres Pi-hole zeigen. Ihr Host-System sollte nach der Deaktivierung von systemd-resolved
oder dnsmasq
eine statische resolv.conf
haben, die entweder auf 127.0.0.1
(wenn Pi-hole im Host-Modus läuft) oder auf einen öffentlichen DNS-Server zeigt, um die Internetverbindung vor dem Start von Pi-hole sicherzustellen.
5. Docker-Compose: Neu bauen und neu erstellen
Wenn Sie docker-compose
verwenden, können Syntaxfehler oder veraltete Konfigurationen Probleme verursachen. Versuchen Sie, Ihre Container neu zu erstellen:
docker-compose down # Stoppt und entfernt Container/Netzwerke
docker-compose up -d --build --force-recreate # Baut neu und erstellt Container neu
Dies stellt sicher, dass alle Änderungen an Ihrer docker-compose.yml
angewendet werden und keine alten Artefakte im Weg sind.
6. Pi-hole im Host-Netzwerkmodus (vereinfacht, aber mit Einschränkungen)
Für Pi-hole kann der network_mode: host
eine einfache Lösung sein, da er Pi-hole direkt auf dem Netzwerk-Stack des Hosts laufen lässt, ohne Port-Mappings. Dies eliminiert viele Netzwerkprobleme, birgt aber das Risiko von Portkonflikten mit anderen Diensten auf dem Host.
version: "3"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
network_mode: host # Hier ist der Unterschied
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'your_password'
# Und weitere Pi-hole spezifische Umgebungsvariablen
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
restart: unless-stopped
Mit diesem Modus sind keine ports:
-Definitionen mehr nötig, da der Container direkt die Host-Ports nutzt. Dies ist oft die schnellste Lösung, wenn Sie nur Pi-hole auf den Ports 53 und 80/443 betreiben wollen.
Prävention ist der beste Schutz
Um zukünftige Probleme zu vermeiden, beherzigen Sie diese Tipps:
- Dokumentation: Halten Sie Ihre Konfigurationen (
docker-compose.yml
, Firewall-Regeln, Router-Einstellungen) fest. docker-compose
verwenden: Es macht Ihre Setups reproduzierbar und einfacher zu verwalten.- Regelmäßige Updates: Halten Sie Ihr Host-System und Ihre Docker-Images aktuell.
- Ressourcenüberwachung: Behalten Sie CPU, RAM und Speicherplatz im Auge. Ein überlastetes System ist anfälliger für Probleme.
- Tests: Testen Sie nach jeder größeren Änderung die Erreichbarkeit und Funktionalität.
Fazit: Geduld und Methode führen zum Ziel
Das „Fehler-Trio” aus Pi-hole, Docker und Portainer kann anfangs entmutigend wirken, wenn es nicht so funktioniert, wie es soll. Doch wie wir gesehen haben, lassen sich die meisten Probleme auf eine Handvoll bekannter Ursachen zurückführen, die sich mit einer systematischen Diagnose und den richtigen Lösungsansätzen beheben lassen. Der Schlüssel liegt in der Geduld, der schrittweisen Überprüfung und dem Verständnis der komplexen Interaktion zwischen Netzwerk, Docker und den Anwendungen.
Wir hoffen, dieser detaillierte Guide hilft Ihnen dabei, Ihr Pi-hole-, Docker- und Portainer-Setup erfolgreich zum Laufen zu bringen und die Vorteile dieser leistungsstarken Kombination in vollem Umfang genießen zu können. Bleiben Sie dran, experimentieren Sie weiter – und vor allem: Lassen Sie sich nicht entmutigen!