wusa88
Goto Top

Docker Pi-Hole, Update Lists schlägt fehl

Hallo Zusammen,

ich versuche gerade Docker Pi-Hole zum laufen zu bringen.
Pi-Hole habe ich wie folgt gestartet:
sudo docker run -d     
--name pihole    
-p 53:53/tcp 
-p 53:53/udp 
-p 8000:80    
-v /etc/pihole/:/etc/pihole/    
-v /etc/dnsmasq.d/:/etc/dnsmasq.d/     
--restart=unless-stopped     
diginc/pi-hole-multiarch:debian_armhf

Es wurde sauber heruntergeladen und auch ohne Fehler gestartet.
Den Port habe ich absichtlich in 8000 geändert, da ich bereits etwas mit Port 80 am laufen habe.

Jetzt habe ich allerdings folgende Fehler:
- Rufe ich (http://pi.hole:8000/admin) auf, öffnet die Seite ohne jegliche Probleme. Bin allerdings direkt eingeloggt ohne Passwortabfrage

- Möchte ich die Listen Updaten, erscheint:
Installation Failure: /etc/pihole/setupVars.conf does not exist! 
  Please run 'pihole -r', and choose the 'reconfigure' option to fix.  
Rufe ich dann
pihole -r
auf, erscheint folgende Meldung:
sudo: pihole: command not found
Der Container ist allerdings gestartet.

Ich weiß hier leider nicht mehr weiter?

Content-ID: 378877

Url: https://administrator.de/contentid/378877

Ausgedruckt am: 23.11.2024 um 16:11 Uhr

aqui
aqui 02.07.2018 aktualisiert um 13:16:12 Uhr
Goto Top
Das ist schon komisch, denn das Kommando pihole startet den globalen Konfig Assistenten.
Möglich das mit deinem Suchpfad irgendwas nicht stimmt und er deshalb das Kommando nicht findet ?!
Vermutlich klappt dann auch kein pihole -h oder pihole -c , richtig ?
Such es mal in seinem Verzeichnis wo es steht und starte es genau dort mit ./pihole -r das sollte dann immer klappen.
Zeigt aber auch das mit deiner Installation etwas nicht stimmt, normal lässt sich das problemlos aufrufen.
Infos dazu auch hier:
https://www.heise.de/ct/ausgabe/2018-11-Schadcode-und-Werbung-mit-Raspbe ...
wusa88
wusa88 02.07.2018 um 13:29:32 Uhr
Goto Top
Funktioniert leider alles nicht.

Kann es sein, da es sich um ein Docker Container handelt, dass ich hier anders vorgehen muss?

Die Heise Seite kann ich leider nicht lesen. Würde mich 1,49€ kosten.
IrunGoldstein
IrunGoldstein 02.07.2018 aktualisiert um 13:41:50 Uhr
Goto Top
Hi Wussa,

was gerne auch vergessen wird. Rufst du deine Befehle im Container "docker exec ...." oder direkt auf deiner Host Konsole auf?

Denn ein direkter aufruf in der Konsole wird so nicht funktionieren die logic und die binaries liegen im Container.

Falls du es von der Projektseite hast müsstest du beim aufrufen von "docker run ... -e ..." noch die enviroment variablen setzten welche Benutzername/Passwort/IP/Port/sonstige Konfiguration an die install Routine übergibt.

Weiteres:


https://github.com/diginc/docker-pi-hole/blob/master/README.md


Grüße

Edit: Wenn du es richtig konfiguriert hast musst seit release 3 nicht mehr selber dannach schauen sondern cron innerhalb des Containers aktualisiert die listen von allein.

Automatic Ad List Updates - since the 3.0+ release, cron is baked into the container and will grab the newest versions of your lists and flush your logs. Set your TZ environment variable to make sure the midnight log rotation syncs up with your timezone's midnight.  
Xerebus
Xerebus 02.07.2018 aktualisiert um 14:08:21 Uhr
Goto Top
Mir sudo?
sudo pihole -r

Zum einloggen ohne PW.
Den Cache im Browser mal geleert?
wusa88
wusa88 02.07.2018 aktualisiert um 14:43:25 Uhr
Goto Top
Ich hätte vielleicht erwähnen sollen, dass es sich bei mir um einen Pi 3 handelt, auf dem ich Pi-Hole betreiben will.

Ein Ausführen von
sudo docker exec pihole -r 
bringt folgende Meldung:
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"-r\": executable file not found in $PATH": unknown  

Installation habe ich von hier:
https://hub.docker.com/r/diginc/pi-hole-multiarch/

Mit diesen Parametern::
sudo docker run -d      
--name pihole     
-p 53:53/tcp  
-p 53:53/udp  
-p 8000:80     
-v /etc/pihole/:/etc/pihole/     
-v /etc/dnsmasq.d/:/etc/dnsmasq.d/      
--restart=unless-stopped      
diginc/pi-hole-multiarch:debian_armhf
129580
129580 02.07.2018 aktualisiert um 18:05:53 Uhr
Goto Top
Hallo,


Zitat von @wusa88:

Ich hätte vielleicht erwähnen sollen, dass es sich bei mir um einen Pi 3 handelt, auf dem ich Pi-Hole betreiben will.

Ein Ausführen von
sudo docker exec pihole -r 
bringt folgende Meldung:
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"-r\": executable file not found in $PATH": unknown  
> 

das ist auch falsch. Du musst natürlich auch den Container angeben, wo du das ausführen willst.
docker exec <container id/name> <befehl>

In deinem Fall so:
docker exec pihole pihole -r

P.S. Hättest du auch mit der Hilfefunktion selbst feststellen können ;)
docker exec --help


EDIT:
Was das aktualisieren der Liste angeht: wie bereits @IrunGoldstein geschrieben hat, wird ab Version 3.0 das automatisch per Cron erledigt. Siehe auch das README was im Docker Hub verlinkt wurde. Dadurch das du das latest Docker Image verwendet hast, hast du die Version 3.3.1. Somit musst das nicht mehr selbst aktualisieren.

Automatic Ad List Updates - since the 3.0+ release, cron is baked into the container and will grab the newest versions of your lists and flush your logs.

Viele Grüße,
Exception
wusa88
wusa88 02.07.2018 um 20:54:50 Uhr
Goto Top
Ich bin mit Docker noch nicht so vertraut.
Dennoch Danke für die Hilfe bis hierher!

Aber ich habe nun ein weiteres Problem mit Pi-Hole:
 [✗] Checking apt-get for upgraded packages
 Kernel update detected. If the install fails, please reboot and try again

Nach einem "apt-get update" und einem apt-get upgrade UND einem Neustart, kommt die weiterhin die o.g. Fehlermeldung und ich kann Pi-Hole nicht neu Konfigurieren.
Was könnte das für einen Grund haben?
129580
129580 02.07.2018 aktualisiert um 22:57:01 Uhr
Goto Top
Hallo,

du hast doch jetzt hoffentlich nicht per docker execute den Container von "innen" aktualisiert bzw. verändert? Sowas sollte man immer unterlassen bzw. ausschließlich nur zum Testen durchführen.

Ein Docker Image wird immer mit einem Dockerfile gebaut. Ein Dockerfile gleicht einer Bauanleitung. Das gebaute Image kann und sollte man später nicht mehr verändern. Für jede Änderung muss mithilfe des Dockerfiles ein neues Image erstellt werden.

Wenn du also Änderungen am Image durchführen willst, musst du dies über das Dockerfile machen.

Übrigens sind deine Änderungen durch den Neustart des Containers ohnehin verloren gegangen.
Denn beim "Neustart" wird das Image neugeladen. Für Daten, die persistent abgespeichert werden sollen, musst du ein Volume erstellen bzw. ein Mountpoint einrichten.

Am besten du beschäftigst dich erstmals mit den Grundlagen und das Konzept von Docker.

Viele Grüße,
Exception
wusa88
wusa88 03.07.2018 um 08:45:26 Uhr
Goto Top
Zitat von @129580:
du hast doch jetzt hoffentlich nicht per docker execute den Container von "innen" aktualisiert bzw. verändert? Sowas sollte man immer unterlassen bzw. ausschließlich nur zum Testen durchführen.
Ich denke schon das ich das gemacht habe, allerdings führte das ja auch zu einem weiteren Fehler. Da es sich bei Pi-Hole momentan nur um einen Test handelt und noch nicht "produktiv" eingesetzt wird, habe ich da jetzt keine Bedenken.
Ein Docker Image wird immer mit einem Dockerfile gebaut. Ein Dockerfile gleicht einer Bauanleitung. Das gebaute Image kann und sollte man später nicht mehr verändern. Für jede Änderung muss mithilfe des Dockerfiles ein neues Image erstellt werden.
Das habe ich bisher noch nicht wirklich verwendet, bzw. noch keines selber gebaut. Ich nutze eigentlich nur die Docker Images von Docker Hub.

Übrigens sind deine Änderungen durch den Neustart des Containers ohnehin verloren gegangen.
Denn beim "Neustart" wird das Image neugeladen. Für Daten, die persistent abgespeichert werden sollen, musst du ein Volume erstellen bzw. ein Mountpoint einrichten.
Das denke ich habe ich mit dem Parameter -v gemacht?
Am besten du beschäftigst dich erstmals mit den Grundlagen und das Konzept von Docker.
Das versuche ich, und lese auch wirklich viel. Habe vorher nur mit VM zu tun gehabt und jetzt ist Docker für mich komplett neu.
Ich probiere zwar einiges aber es gibt denke ich noch sehr viel was ich wissen müsste
129580
Lösung 129580 03.07.2018 aktualisiert um 09:57:00 Uhr
Goto Top
Guten Morgen,

Das habe ich bisher noch nicht wirklich verwendet, bzw. noch keines selber gebaut. Ich nutze eigentlich nur die Docker Images von Docker Hub.

Für die meisten Images im Docker Hub werden Build Tools eingesetzt um die Images automatisiert auf den aktuellen Stand zu halten. Erkennen kannst du das indem direkt unter dem Namen des Images noch zusätzlich "automated build dransteht.

Beispiel: Bei dem Image "diginc/pi-hole" wird das Image regelmäßig automatisiert gebaut, während das bei dem zweiten Image "diginc/pi-hole-multiarch" nicht der Fall ist.

screen shot 2018-07-03 at 09.34.30

Da du das zweite Image nutzt, musst du also selbst dich um die Aktualisierung des Images kümmern. Dazu klonst du dir erstmals das Repository von Github, wechselst in das Verzeichnis und erstellst mit Docker ein neues Image.

git clone https://github.com/diginc/docker-pi-hole.git
cd docker-pi-hole
docker build -t exception/pi-hole-multiarch -f Dockerfile_debian_armhf .

Das denke ich habe ich mit dem Parameter -v gemacht?

Korrekt. In deinem Fall hast du zwei Mounts einegrichtet: "/etc/pihole/" und für "/etc/pihole/". Das Verzeichnis wird auf dem Hostsystem erstellt und als Mountpoint für den Container verfügbar gemacht. Der Container kann somit Daten in das Share speichern. Wird der Container beendet, so sind die Daten nach wie vor vorhanden. Wenn du den Container wieder startest, dann kann er die Daten wieder einlesen. Grundsätzlich geht es dabei, die Nutzdaten von den Systemdaten zu trennen. Die Systemdaten braucht man nach Ende der Containerlaufzeit nicht mehr und somit müssen diese nicht gespeichert werden.

Das versuche ich, und lese auch wirklich viel. Habe vorher nur mit VM zu tun gehabt und jetzt ist Docker für mich komplett neu. Ich probiere zwar einiges aber es gibt denke ich noch sehr viel was ich wissen müsste

Kein Problem. Dann kann ich dir die Guide vom Hersteller empfehlen.
https://docs.docker.com

Ansonsten gibt es inzwischen ein sehr gutes umfangreiches Buch vom Rheinwerk-Verlag.
Allerdings wurde vom Verlag eine neue aktualisierte Auflage angekündigt, die erst im Oktober erscheint.

https://www.rheinwerk-verlag.de/skalierbare-container-infrastrukturen_46 ...

Viele Grüße,
Exception
IrunGoldstein
Lösung IrunGoldstein 03.07.2018 um 10:28:18 Uhr
Goto Top
Hi Wusa,

bin leider gestern nicht mehr dazu gekommen.

Wünsche mir aber das du es nutzen kannst weswegen ich es dir ausführlich zeige.

Wenn das Grundprinzip der Docker Container verstanden ist fluppt das auch besser.

So wie exeption es schon erleutert hat führst du bitte keine anderen befehle in Containern aus ( denn der Container ist nach einem Rezept das Dockerfile genannt gebaut und betriebsbereit für genau diesen fall der Anwendung. Der Koch (Entwickler/Maintainer) hat im besten fall alles so vorbereitet das jeder der sich an sein Rezept hält exakt das selbe Ergebnis bekommt. Egal ob wie in deinem Fall 1 Pihole Container oder 1000 Nginx Container die im Cluster verteilt über mehrere Rechenzentren laufen ist der Prozess immer der selbe.

Jetzt aber zu Pihole.

Wie schon mehrmals erwähnt und von dir gefunden pushed der Maintainer sein Image auf Dockerhub sprich die von ihm vorbereitete und nach seinem Rezept gebaute Version mit allem was nötig ist um genau die Aufgabe Pihole auszuführen. Nicht mehr nicht weniger.

Wenn du dem Link auf Dockerhub folgst zu Github wo das Repository zu diesem Image liegt findest du die Anleitung zur Konfiguration und Nutzung von Pihole.

Dann beginnen wir mal:

1. In der README erläutert der Maintainer das folgende variablen mindestens benötigt werden um es erfolgreich zu starten.

Docker Run Kommando ist auch aufgeführt:

docker run -d \ 
 --name pihole \ 
-p 53:53/tcp -p 53:53/udp -p 80:80 -p 443:443 \ 
-v "${DOCKER_CONFIGS}/pihole/:/etc/pihole/" \   
-v "${DOCKER_CONFIGS}/dnsmasq.d/:/etc/dnsmasq.d/" \   
-e ServerIP="${IP}" \   
-e ServerIPv6="${IPv6}" \   
--restart=unless-stopped \ 
diginc/pi-hole:latest 

Jetzt setzen wir alles zusammen für deine Bedürfnisse:

 docker run -d --name mypihole -p 53:53/tcp -p 53:53/udp -p 8000:80 -v /docker/data/phihole/:/etc/pihole/  -v /docker/data/dnsmasq.d/:/etc/dnsmasq.d/ -e ServerIP=141.28.105.101 --restart=unless-stopped diginc/pi-hole-multiarch:debian_armhf 

ServerIP musst du ersetzten durch deine IP und die data pfade natürlich bitte anpassen falls nicht legt docker die Verzeichnisse für dich an auf deinem System.

Wichtig in deinem fall da es auf einem PI läuft -multiarch:debian_armhf

Dann falls die logs das Random Passwort nicht direkt ausgegeben haben das Passwort für admin setzten:

Meine Ausgabe:

clouduser@cloud:~$ docker run -d --name mypihole -p 53:53/tcp -p 53:53/udp -p 8000:80 -v /docker/data/phihole/:/etc/pihole/  -v /docker/data/dnsmasq.d/:/etc/dnsmasq.d/ -e ServerIP=141.28.105.101 --restart=unless-stopped diginc/pi-hole

90f049af7ff44ef3b0fbea87a12f22debcb9a8127935f85b33262208cf884e9a

clouduser@cloud:~$ docker exec mypihole pihole -a -p 12345678         
                            
  [✓] New password set                         
                                           

Dann folge mir bitte zu:

http://deineIP:8000/admin

Müsstest folgendes sehen:

screenshot_20180703-102313_firefox

Einloggen mit deinem vergebenen Passwort und erfreuen.

Ps. Firewall ports 53 tcp udp und 8000 tcp nicht vergessen falls vorhanden.


Grüße
wusa88
wusa88 03.07.2018 aktualisiert um 11:23:03 Uhr
Goto Top
Erstmal vielen Dank für die schnell und freundliche Hilfe!

Hier nochmal eine kurze Zusammenfassung wie ich es dank eurer Hilfe geschafft habe!

Wie von @129580 beschrieben
 
git clone https://github.com/diginc/docker-pi-hole.git
cd docker-pi-hole/
sudo docker build -t wusa/pi-hole-multiarch -f Dockerfile_debian_armhf .

Dann wie von @IrunGoldstein beschrieben
sudo docker run -d     
--name pihole     
-p 53:53/tcp -p 53:53/udp 
-p 8000:80     
-v /etc/pihole/:/etc/pihole/    
 -v /etc/dnsmasq.d/:/etc/dnsmasq.d/    
-e ServerIP=192.168.7.12   
--restart=unless-stopped     
wusa/pi-hole-multiarch
und anschließend mit
sudo docker exec pihole pihole -a -p supergeheimespasswort
noch das Passwort geändert.

Der Zugriff auf die Admin Konsole ist jetzt mit Passwort möglich. http://192.168.7.12:8000/admin
Die Listen sind geupdated und es wird keine Fehlermeldung mehr angezeigt.

Allerdings habe ich noch zwei Fragen:
Wenn ein Docker Container ohne die Angabe einer IP gestartet wird, dann wird immer eine IP aus dem Bereich 127.17.0.x vergeben.

Jetzt wird aber speziell eine IP beim dem Starten dieses Containers verlangt.
Ich habe jetzt die Standard IP vergeben die auch mein Pi hat.
Ist das richtig?

Und..
Bei diesem
sudo docker build -t wusa/pi-hole-multiarch -f Dockerfile_debian_armhf .
Befehl wurde relativ viel nachinstalliert.
Wurden die Pakete direkt auf meine System installiert oder alles isoliert im Container?
129580
129580 03.07.2018 aktualisiert um 11:33:59 Uhr
Goto Top
Hi,

Wenn ein Docker Container ohne die Angabe einer IP gestartet wird, dann wird immer eine IP aus dem Bereich 127.17.0.x vergeben. Jetzt wird aber speziell eine IP beim dem Starten dieses Containers verlangt. Ich habe jetzt die Standard IP vergeben die auch mein Pi hat. Ist das richtig?

für Docker gibt es ein spezielles internes Netzwerk. (In deinem Fall 127.17.0.x). Jeder Container erhält eine IP aus diesem Bereich. Das ist aber wie gesagt intern und hat nichts mit dem Parameter zu tun. Ich kenne jetzt Pi Hole nicht so gut aber vermutlich wird damit bestimmt, auf welche Adresse der Dienst lauschen soll. Laut der Doku musst du dort die IP Adresse deines PI`s angeben. Somit richtig.

Und..
Bei diesem
sudo docker build -t wusa/pi-hole-multiarch -f Dockerfile_debian_armhf .
Befehl wurde relativ viel nachinstalliert.
Wurden die Pakete direkt auf meine System installiert oder alles isoliert im Container?

Mit diesem Befehl wird das Image gebaut. Die Installationen und Änderungen sind somit im Image - nicht auf dem Hostsystem selbst. Mit dem Image wird dann später der Container gestartet. Über Docker Hub beziehst du immer fertige Images. Deshalb kannst du den Container sofort starten.

Viele Grüße,
Exception
IrunGoldstein
IrunGoldstein 03.07.2018 aktualisiert um 11:45:03 Uhr
Goto Top
Edit: zu langsam ;)

Freut mich das es läuft face-smile

Das mit der IP ist kein Problem da die Software pihole jetzt annimt das es auf der IP 192.168.7.12 erreichbar ist.

Was ja auch stimmt. Denn alle ports die beim aufruf mit "docker run ... -p ..." gestartet werden, mappt die Dockerengine im Hintergrund per iptables mit regeln an die docker internenen ip adressen und sie werden erreichbar gemacht.

Intern kann docker also als ips verwenden wie es lustig ist und sorgt selbständig für das Routing auf den Interfaces.

Das bezieht sich jetzt auf linux mit Standart Docker Installation denn alles davon kannst du umkonfigurieren wie du willst und es in DEINE Umgebung passt.

Arbeite dich echt mal durch die Docker Dokumentation und mach weiter auf Docker Compose man kann sich fantastische orchestrationen für Server und Clients bauen welche extrem schnell gesichert/ausgerollt werden können.

Grüße
wusa88
wusa88 03.07.2018 um 12:45:58 Uhr
Goto Top
Wenn ich den Pi jetzt in ein anderes Netz nehme, brauche ich dann nur den Container zu stoppen, die IP vom PI selbst ändern und dann den Container mit der neuen IP wieder starten?
Würde das funktionieren?

Zitat von @IrunGoldstein:
Freut mich das es läuft face-smile
Mich auch =)

Arbeite dich echt mal durch die Docker Dokumentation und mach weiter auf Docker Compose man kann sich fantastische orchestrationen für Server und Clients bauen welche extrem schnell gesichert/ausgerollt werden können.

Ich versuche mich so gut es geht mit Docker zu beschäftigen. Da ich allerdings noch nie was damit zu tun hatte, fällt mir das nicht gerade leicht.
Aber ich werde lesen und probieren ;)
129580
129580 03.07.2018 um 12:56:51 Uhr
Goto Top
Hi,


Zitat von @wusa88:

Wenn ich den Pi jetzt in ein anderes Netz nehme, brauche ich dann nur den Container zu stoppen, die IP vom PI selbst ändern und dann den Container mit der neuen IP wieder starten?
Würde das funktionieren?

Ja. Bei diesem Parameter handelt es sich übrigens nur um eine Umgebungsvariable, die dann innerhalb des Containers zur Verfügung steht und von der Anwendung verwendet wird. ;)

Du musst diese also nur an die neue IP anpassen.

-e ServerIP=192.168.7.12  

Viele Grüße,
Exception
wusa88
wusa88 03.07.2018 um 13:43:11 Uhr
Goto Top
Vorausetzung aber, dass der Pi auch die "neue" IP hat?

Wenn ich Beispielsweise dem Pi die IP 192.168.100.100 gebe, dann einfach auch den Container mit dieser IP (192.168.100.100) starten?

Ich denke nicht, dass es funktioniert, den Pi selbst in ein neues Netz zu nehmen (192.168.100.100) und den Container mit dieser IP starte (-e ServerIP=192.168.7.12 ).
Technisch würde mir das nicht einleuchten.
129580
129580 03.07.2018 aktualisiert um 14:34:05 Uhr
Goto Top
Hi,

klar geht das. Wie bereits oben geschrieben, mit dem Parameter -e vergibst du dem Container keine IP, sondern du setzt nur eine Umgebungsvariable. Das hat weder was mit Docker noch was mit dem Netzwerk zu tun. Warum man für den Pi Hole eine solche Umgebungsvariable setzen muss, kann dir nur der Entwickler dieses Dockerfiles sagen.

Der Container selbst befindet sich in einem internen Docker Netzwerk. Die Docker Bridge setzt das Forwarding der IP Pakete mit NAT (Masquerading) um. Dazu wird iptables verwendet. Somit kann der Container mit der Außenwelt kommunizieren, unabhängig in welches Netzwerk gerade dein Pi hängt.

Viele Grüße,
Exception
wusa88
wusa88 04.07.2018 aktualisiert um 07:50:13 Uhr
Goto Top
Ich habe mich gestern leider zu früh gefreut. Die Admin Seite von Pi Hole öffnet sich zwar, allerdings werden die Daten nicht aktualisiert.
Hier zu sehen, dass die Seite wie gewünscht geöffnet wird.
screenshot_20180704-065725

Eingetragen ist der DNS von Pi Hole:
screenshot_20180704-065520__01

Und zum testen nehme ich gerne die Bild Seite, da sich viel zu viel Werbung befindet:
screenshot_20180704-065501

Hier sieht man auch, dass Pi Hole sauber arbeitet.

Jetzt ist es leider so, dass die Funktion zwar gegeben ist, aber die Admin Seite nichts anzeigt.

Falls jemand wegen dem Routing fragt da ich unterschiedliche IPs nutze. Das Routing ist alles richtig eingestellt.
Hatte vorher im selben Netz ein Notebook stehen, auf dem ich Pi Hole getestet hab und hier war alles wie gewünscht. Nur will ich kein Notebook laufen kassen, sodass ich auf den Pi gegangen bin.
wusa88
wusa88 04.07.2018 um 14:20:46 Uhr
Goto Top
Habe jetzt kurzerhand noch einen Portscan durchgeführt, damit ich die offenen Ports von dem Pi sehe:

nmap -p- 192.168.7.12

Starting Nmap 7.40 ( https://nmap.org ) at 2018-07-04 14:16 CEST
Nmap scan report for 192.168.7.12
Host is up (0.00042s latency).
Not shown: 65530 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
53/tcp open domain
80/tcp open http
8000/tcp open http-alt

Somit sollte der Port 8000 auch frei sein.

Da DNS selbst funktioniert, hatte ich nur den Port 8000 in Verdacht, da dieser für die Seite zuständig ist.
129580
129580 04.07.2018 aktualisiert um 15:34:25 Uhr
Goto Top
Hi,

sicher dass der Pi Hole die Anzeigen blockiert und nicht irgendein Adblocker auf dein Smartphone?
Ansonsten schau mal mit dem Befehl, ob der Container richtig initialisiert wurde bzw. ob eventuell im Hintergrund irgendwelche Fehler entstanden sind:

docker logs pihole

Da DNS selbst funktioniert, hatte ich nur den Port 8000 in Verdacht, da dieser für die Seite zuständig ist.

Daran sollte es eigentlich nicht liegen, wenn schon zwei Dienste in einem Container sind (sollte man normalerweise auch nicht machen), dann wird der Webserver lokal die Daten beim DNS Server abfragen. Die Frage ist halt nur wie er das macht. Hier kenne ich mich mit Pi Hole leider nicht so gut aus. Vermutlich werden beim dnsmasq die Queries in einem Log gespeichert und das Admin Panel ließt das Log anschließend aus. Aber genau kann ich dir das nicht sagen.

Wie gesagt führ mal bitte den docker logs Befehl aus. Ansonsten kannst du das mal mit einer älteren Version ausprobieren. Dazu musst du hinter dem Image noch ein Tag angeben. In der Dokumentation wird vom Entwickler übrigens abgeraten einen anderen Port als 80 zu verwenden. Eventuell könnte das auch daran liegen. Wenn man unbedingt einen anderen Port als 80 verwendet, dann soll man einen Reverse Proxy verwenden.

Viele Grüße,
Exception
wusa88
wusa88 04.07.2018 um 16:24:25 Uhr
Goto Top
Zitat von @129580:
sicher dass der Pi Hole die Anzeigen blockiert und nicht irgendein Adblocker auf dein Smartphone?
ja da bin ich mir ganz sicher, da ich keinen Adblocker auf dem Smartphone habe.
Ansonsten schau mal mit dem Befehl, ob der Container richtig initialisiert wurde bzw. ob eventuell im Hintergrund irgendwelche Fehler entstanden sind:
Werde ich heute Abend direkt ausprobieren.
docker logs pihole

Wie gesagt führ mal bitte den docker logs Befehl aus. Ansonsten kannst du das mal mit einer älteren Version ausprobieren. Dazu musst du hinter dem Image noch ein Tag angeben. In der Dokumentation wird vom Entwickler übrigens abgeraten einen anderen Port als 80 zu verwenden. Eventuell könnte das auch daran liegen. Wenn man unbedingt einen anderen Port als 80 verwendet, dann soll man einen Reverse Proxy verwenden.

Der Port 80 den ich momentan lokal nutze ist "nur" Dokuwiki. Da kann ich aber mal nachsehen, ob es dafür auch ein Docker Image gibt, dann vergebe ich hier einen anderen Port.
Aber jetzt sehe ich erstmal nach was die Logs sagen und poste es ggf. hier.
wusa88
wusa88 04.07.2018 um 19:08:59 Uhr
Goto Top
Ich weiß leider nicht wie man Spoiler erstellen kann. TXT Dateien sind zu Hochladen auch nicht erlaubt. Daher jetzt mal in Code Tags. Wenn ich das irgendwie ändern kann, dann brauche ich bitte den Code Tag ;)

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] 01-resolver-resolv: applying...
[fix-attrs.d] 01-resolver-resolv: exited 0.
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 20-start.sh: executing...
ARCH=armhf
BASH=/bin/bash
BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interact                                                            ive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=(="0")  
BASH_SOURCE=(="/var/run/s6/etc/cont-init.d/20-start.sh")  
BASH_VERSINFO=(="4" [1]="4" [2]="12" [3]="1" [4]="release" [5]="arm-unknown-l                                                            inux-gnueabihf")  
BASH_VERSION='4.4.12(1)-release'  
CWD=/
DIRSTACK=()
DOCKER_REPO=multiarch/debian-debootstrap
EUID=0
FTL_CMD=no-daemon
GROUPS=()
HOME=/root
HOSTNAME=906383a0bef4
HOSTTYPE=arm
IFS=$' \t\n'  
IPv6=True
MACHTYPE=arm-unknown-linux-gnueabihf
OPTERR=1
OPTIND=1
OSTYPE=linux-gnueabihf
PATH=/opt/pihole:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PHP_ENV_CONFIG=/etc/lighttpd/conf-enabled/15-fastcgi-php.conf
PHP_ERROR_LOG=/var/log/lighttpd/error.log
PIHOLE_INSTALL=/tmp/ph_install.sh
PPID=209
PS4='+ '  
PWD=/
S6OVERLAY_RELEASE=https://github.com/just-containers/s6-overlay/releases/downloa                                                            d/v1.21.2.2/s6-overlay-armhf.tar.gz
S6_KEEP_ENV=1
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=1
ServerIP=192.168.7.12
TAG=debian
TERM=dumb
UBUNTU_SUITE=stretch
UID=0
_=bash
setupVars=/etc/pihole/setupVars.conf
 ::: Starting docker specific setup for docker diginc/pi-hole
Assigning random password: Mtptz_sU
+ [[ Mtptz_sU == '' ]]  
+ pihole -a -p Mtptz_sU Mtptz_sU
  [?] New password set
Using default DNS servers: 8.8.8.8 & 8.8.4.4
DNSMasq binding to default interface: eth0
Added ENV to php:
                        "PHP_ERROR_LOG" => "/var/log/lighttpd/error.log",  
                        "ServerIP" => "192.168.7.12",  
                        "VIRTUAL_HOST" => "192.168.7.12",  
Using IPv4 and IPv6
dnsmasq: syntax check OK.
::: Testing DNSmasq config: ::: Testing lighttpd config: Syntax OK
::: All config checks passed, starting ...
::: Docker start setup complete
  [i] Neutrino emissions detected...
  [?] Pulling blocklist source list into range

  [i] Target: raw.githubusercontent.com (hosts)
  [?] Status: Retrieval successful

  [i] Target: mirror1.malwaredomains.com (justdomains)
  [?] Status: Retrieval successful

  [i] Target: sysctl.org (hosts)
  [?] Status: Retrieval successful

  [i] Target: zeustracker.abuse.ch (blocklist.php?download=domainblocklist)
  [?] Status: Retrieval successful

  [i] Target: s3.amazonaws.com (simple_tracking.txt)
  [?] Status: Retrieval successful

  [i] Target: s3.amazonaws.com (simple_ad.txt)
  [?] Status: Retrieval successful

  [i] Target: hosts-file.net (ad_servers.txt)
  [?] Status: Retrieval successful

  [?] Consolidating blocklists
  [?] Extracting domains from blocklists
  [i] Number of domains being pulled in by gravity: 151027
  [?] Removing duplicate domains
  [i] Number of unique domains trapped in the Event Horizon: 127788
  [i] Nothing to whitelist!
  [?] Parsing domains into hosts format
  [?] Cleaning up stray matter

pihole-FTL: no process found
  [?] DNS service is running
  [?] Pi-hole blocking is Enabled
[cont-init.d] 20-start.sh: exited 0.
[cont-init.d] done.
[services.d] starting services
Starting dnsmasq
Starting crond
Starting lighttpd
Starting pihole-FTL (no-daemon)
[services.d] done.
dnsmasq: started, version 2.76 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua                                                             TFTP conntrack ipset auth DNSSEC loop-detect inotify
dnsmasq: using nameserver 8.8.4.4#53
dnsmasq: using nameserver 8.8.8.8#53
dnsmasq: reading /etc/resolv.conf
dnsmasq: using nameserver 8.8.4.4#53
dnsmasq: using nameserver 8.8.8.8#53
dnsmasq: using nameserver 192.168.10.1#53
dnsmasq: read /etc/hosts - 7 addresses
dnsmasq: read /etc/pihole/gravity.list - 127788 addresses
dnsmasq: read /etc/hosts - 7 addresses
dnsmasq: read /etc/pihole/gravity.list - 127788 addresses
Starting dnsmasq
dnsmasq: started, version 2.76 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua                                                             TFTP conntrack ipset auth DNSSEC loop-detect inotify
dnsmasq: using nameserver 85.214.20.141#53
dnsmasq: using nameserver 77.109.148.137#53
dnsmasq: reading /etc/resolv.conf
dnsmasq: using nameserver 85.214.20.141#53
dnsmasq: using nameserver 77.109.148.137#53
dnsmasq: using nameserver 192.168.10.1#53
dnsmasq: read /etc/hosts - 7 addresses
dnsmasq: read /etc/pihole/gravity.list - 127788 addresses
dnsmasq: read /etc/hosts - 7 addresses
dnsmasq: read /etc/pihole/gravity.list - 129373 addresses

Ich sehe bisher nicht außergewöhnliches. Zumindest keinen groben Fehler... oder übersehe ich was?

Die Logs über die Admin Seite von Pi Hole selbst sind leer.
aqui
aqui 04.07.2018 um 19:22:41 Uhr
Goto Top
In der Zeit hätte man schon 10 SD Karten mit PiHole geflasht in einen RasPi2 oder noch besser in einen 10 Euro RasPi Zero gesteckt, USB LAN Adapter für 4 Euro dran und das PiHole wäre schon seit 3 Tagen wunderbar am Laufen...
Aber warum einfach machen wenn es mit Docker frickeln auch umständlich geht... face-wink
wusa88
wusa88 04.07.2018 um 20:04:54 Uhr
Goto Top
Da hast du natürlich recht. Lernkurve allerdings dann gleich 0 face-wink

Und ich habe mittlerweile 4 Pi am laufen. Ich möchte durch das einen Ablösen. Muss auch etwas auf meinen Stromverbrauch schauen face-wink
129580
129580 04.07.2018 aktualisiert um 20:39:33 Uhr
Goto Top
Hi,

Aber warum einfach machen wenn es mit Docker frickeln auch umständlich geht...

sehe ich persönlich etwas anders. Wenn man die Grundlagen von Docker beherrscht und im Skripten etwas Erfahrung hat, dann kann man das sehr schnell umsetzen. Und frickeln bei Docker ist nur dann erforderlich, wenn man ein fertiges Image von Docker Hub verwendet. (Ausnahme sind offizielle Images von Herstellern). Wenn der TO auf dem Raspi nur Pi Hole zum laufen bringen möchte, dann hätte ich den Aufwand mit Docker auch nicht gemacht. Da er offenbar allerdings sich mit Docker beschäftigen möchte, ist das wieder was anderes.

Die Logs über die Admin Seite von Pi Hole selbst sind leer.

Hast du auch diese geprüft? -> /var/log/lighttpd/error.log

Viele Grüße,
Exception
wusa88
wusa88 04.07.2018 um 20:25:29 Uhr
Goto Top
Zitat von @129580:
Hast du auch diese geprüft? -> /var/log/lighttpd/error.log
Wollte ich... der Pfad ist allerdings auf dem Pi nicht vorhanden.
Wie ich innerhalb des Containers da nachsehen kann weiß ich leider nicht.
129580
129580 04.07.2018 um 20:31:34 Uhr
Goto Top
Wie bereits schon mal geschrieben, für diesen Pfad gibt es kein Mount bzw. Volume. => Pfad ist daher nur im Container
Für solche Zwecke kann man dann docker execute verwenden:

docker exec pihole cat /var/log/lighttpd/error.log
wusa88
wusa88 04.07.2018 um 20:36:19 Uhr
Goto Top
2018-07-03 08:48:03: (log.c.217) server started
2018-07-04 16:57:09: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Warning:  file(http://127.0.0.1/admin/scripts/pi-hole/php/queryads.php?domain=localhost&amp;bp): failed to open stream: HTTP request failed!  in /var/www/html/pihole/index.php on line 133
2018-07-04 16:57:09: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Warning:  array_filter() expects parameter 1 to be array, string given in /var/www/html/pihole/index.php on line 134
2018-07-04 16:57:09: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Warning:  array_values() expects parameter 1 to be array, null given in /var/www/html/pihole/index.php on line 134
2018-07-04 16:57:16: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Warning:  file(http://127.0.0.1/admin/scripts/pi-hole/php/queryads.php?domain=localhost&amp;bp): failed to open stream: HTTP request failed!  in /var/www/html/pihole/index.php on line 133
2018-07-04 16:57:16: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Warning:  array_filter() expects parameter 1 to be array, string given in /var/www/html/pihole/index.php on line 134
2018-07-04 16:57:16: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Warning:  array_values() expects parameter 1 to be array, null given in /var/www/html/pihole/index.php on line 134
2018-07-04 16:57:47: (mod_fastcgi.c.2543) FastCGI-stderr: PHP Warning:  parse_ini_file(/etc/pihole/pihole-FTL.conf): failed to open stream: No such file or directory in /var/www/html/admin/api_db.php on line 21

Hier denke ich ist der Fehler begraben. So wie es aussieht hat er mit mehreren Dateien ein Problem.
Werde jetzt mal die Fehler genau unter die Lupe nehmen.
wusa88
wusa88 06.07.2018 um 08:40:34 Uhr
Goto Top
Ich habe das ganze jetzt nochmal von ganz vorne Aufgerollt.

Als erstes habe ich versucht den Port 80 für Pi Hole frei zu bekommen. Das habe ich in meiner lokalen Nginx Config gemacht und habe mein Dokuwiki auf einen anderen Port gelegt. Somit kann ich jetzt Pi Hole mit dem Port 80 starten.

Dann habe ich die ganzen Images gelöscht, auch das lokale Verzeichnis, das mit dem Parameter -v eingebunden wird.

Dann nochmal das ganze von vorne Begonnen.

Nach Eingabe von:
sudo docker exec pihole cat /var/log/lighttpd/error.log
Habe ich folgende Ausgabe:
2018-07-05 17:12:43: (log.c.217) server started

Somit sehe ich weiterhin kein Problem.

Allerdings habe ich das Gefühl das mit den Ports etwas nicht stimmt:
netstat -an
Ausgabe:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN
tcp6       0      0 :::53                   :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::8000                 :::*                    LISTEN
udp        0      0 0.0.0.0:68              0.0.0.0:*
udp        0      0 0.0.0.0:44173           0.0.0.0:*
udp        0      0 0.0.0.0:5353            0.0.0.0:*
udp6       0      0 :::51129                :::*
udp6       0      0 :::53                   :::*
udp6       0      0 :::5353                 :::*
raw6       0      0 :::58                   :::*                    7
Hier fehlt mir tcp und udp 80.
Für tcp6 ist es vorhanden. Ob das reicht... weiß ich leider nicht.

Ansonsten noch folgende Ausgabe:
docker ps

CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS                  PORTS                                                        NAMES
b2af013c5b83        wusa/pi-hole-multiarch   "/s6-init"          13 hours ago        Up 13 hours (healthy)   0.0.0.0:53->53/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:53->53/udp   pihole  
Hier sollte soweit ich das sehe auch alles i.O. sein.

Wieder das selbe Phänomen, wie letztens. DNS bzw. Pi Hole funktioniert. Allerdings funktionieren keinerlei anzeigen auf der Seite.
129580
129580 06.07.2018 aktualisiert um 11:39:38 Uhr
Goto Top
Hallo,

Edit: Zeile entfernt: ist Blödsinn. Siehe Kommentar unten.
Docker macht lediglich Port Forwarding mithilfe von iptables.

Wenn etwas mit den Ports nicht stimmen sollte, wieso kannst du dann die Weboberfläche erreichen? Wieso geht die DNS Auflösung über den Pi Hole? ;)
Das Problem liegt beim Image. Daher würde ich ein Issue Eintrag auf dem Github Repository des Projekts erstellen.

Viele Grüße,
Exception
wusa88
wusa88 06.07.2018 um 11:21:39 Uhr
Goto Top
Aber sollten die Ports in Richtung Container nicht sichtbar sein?

Ich sage doch per RUN Command, welche Ports außerhalb und welche Ports innerhalb des Containers genutzt werden sollen (-p 80:80 )

Ich vermute schön langsam auch ein Problem von dem Image.
Das x86 Image hatte ich zum testen auf einem Ubuntu laufen. Da lief es wunderbar.
129580
129580 06.07.2018 um 11:38:53 Uhr
Goto Top
Hi,

bitte meinen letzten Kommentar ignorieren. Ist Blödsinn - natürlich muss es auch ein Listener auf dem Hostsystem geben.
Da du keine Listener Adresse angegeben hast, wird eine IPv4-mapped IPv6 Adresse verwendet. Daher wird bei netstat tcp6 angezeigt.

Schau mal hier:
https://unix.stackexchange.com/questions/152612/netstat-why-are-ipv4-dae ...

Problem selbst liegt aber nach wie vor beim Image.

Viele Grüße,
Exception
wusa88
wusa88 06.07.2018 um 11:44:09 Uhr
Goto Top
Zitat von @129580:
Problem selbst liegt aber nach wie vor beim Image.

Woraus schließt du das?
129580
129580 06.07.2018 aktualisiert um 12:24:19 Uhr
Goto Top
Beide DIenste (dns server und webserver) laufen in dem selben Container. Somit kannst du ein Netzwerkfehler bzw. ein Fehler auf dem Hostsystem ausschließen. Der Healthcheck passt auch, da ansonsten würde der Container überhaupt nicht laufen.

Da der Fehler darin liegt, dass die Anzeigen auf dem Admin Panel nicht angezeigt werden, vermute ich ein Fehler im Backend (PHP).
Du hast das ganze ja mit einem anderen Image getestet. (diginc/pi-hole) Und da hat das ja funktioniert. Das Image hat übrigens auch @IrunGoldstein verwendet und bei seinen Screenshots sieht man, dass die Abfragen angezeigt werden.

Wie bereits oben geschrieben, würde ich ein Bug Report bei der Projektseite bei Github machen. Alternativ könntest du versuchen das Problem selbst zu beheben, indem du das Git Repository klonst und dann mit Diff die Unterschiede zwischen dem funktionierenden amd64 und dem armhf Image, wo das Problem besteht, machst. (insbesondere bei dem PHP Skript). Anschließend würd ich prüfen, woher und wie das Admin Panel die Daten bezieht. Und als letztes die entsprechenden PHP Skripte debuggen. Und falls du die Lösung gefunden hast: sei so nett und stelle ein Merge Request bei Github.