Pi-hole als Docker Container unter OpenMediaVault
geschrieben von Stefan, zuletzt aktualisiert amNachdem wir euch in der Vergangenheit ja bereits den netzwerkweiten Werbeblocker Pi-hole auf einem Raspberry Pi vorgestellt hatten, folgt nun eine Anleitung um Pi-hole als Docker Container laufen zu lassen. Die Anleitung kann aber auch auf andere Container leicht angepasst angewendet werden. Insofern ist diese Anleitung auch als ein kleines Docker Tutorial zu sehen.
Wir nutzen dafür das NAS Betriebssystem OpenMediaVault und die Container-Webverwaltung Portainer. Ihr könnt den Docker-Container aber natürlich auch aus z.B. Unraid oder einem nativen Linux/Windows System heraus nutzen. Da Pi-hole allerdings 24/7 laufen muss (er ersetzt ja euren DNS-Server im Netzwerk), halte ich es für sinnvoller diesen auf einem kleinen Server wie einem NAS zu installieren und nicht auf eurem privaten Computer.
Docker und Portainer unter OpenMediaVault
Zunächst einmal benötigt ihr ein NAS mit einem aktuellen OpenMediaVault. Aktuell ist momentan OpenMediaVault in Version 6, welches auf Debian 11 basiert. Dieses hatte ich in meinem Artikel OpenMediaVault 6 - Das freie NAS Betriebssystem in der letzten Woche vorgestellt.
Wer sich noch gar nicht mit OpenMediaVault auseinander gesetzt hat, dem empfehle ich zudem unsere Komplettanleitung für OpenMediaVault, welche ich kürzlich auf die aktuellste Version aktualisiert habe.
Da weder Docker noch Portainer (Webverwaltung für Container) in OpenMediaVault enthalten sind, benötigen wir zunächst die OMV-Extras, die eine Plugin-Sammlung sind und OpenMediaVault um viele Möglichkeiten erweitern. Die OMV-Extras können mit dem folgenden Befehl installiert werden:
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash
Nach der Installation der OMV-Extras könnt ihr über den neuen Menüpunkt nun zunächst die Containerverwaltung Docker und anschließend die Weboberfläche Portainer installieren. Ihr könnt statt Portainer auch Yacht nutzen, welches ebenfalls eine Weboberfläche zur Containerverwaltung ist, allerdings etwas simpler daherkommt als Portainer.
Da sich Portainer und Yacht nicht in der Quere kommen, könnt ihr natürlich auch einfach beide installieren und dann ausprobieren welche Weboberfläche für euch am Besten geeignet ist. Auch die Templates in Yacht sind kompatibel zu Portainer.
Portainer
In dieser Anleitung verwenden wir aber Portainer, da es die am häufigsten genutzte Containerverwaltung ist. Anfänger sollten sich hier nicht von den unzähligen Einstellmöglichkeiten verwirren lassen sondern Schritt-für-Schritt vorgehen. Da wir Docker bereits über OpenMediaVault installiert haben, ist diese Umgebung schon in Portainer angelegt.
Die meisten Container benötigen neben dem Image in dem alle benötigten Daten enthalten sind, noch eine Konfiguration. Diese kann später über ein Template erfolgen oder die Variablen können auch direkt im Container gesetzt werden.
DNS-Einstellungen von OpenMediaVault
Ab OpenMediaVault 5 (Debian 10) müsst ihr zuvor den systemd-resolved Dienst umkonfigurieren, da dieser im Standard den DNS-Port 53 nutzt und ihr diesen aber für den pi-hole Container benötigt.
nano /etc/systemd/resolved.conf
Hier müssen die beiden Zeilen DNS-Cache und DNS-StubListener auf no gesetzt und aktiviert werden indem ihr das führende # löscht.
Die Datei anschließend mit Strg+O speichern. Mit Strg+X schließt ihr die Datei. Anschließend muss noch der systemd-resolved Dienst neu gestartet werden:
systemctl restart systemd-resolved
In Docker einen neuen Container anlegen
Es gibt mehrere Wege um in Docker einen neuen Container anzulegen. Der erste Weg wäre über das DockerHub, welches bereits eingerichtet ist. Docker verwendet hier standardmäßig einen anonymen Docker-Account, der zwar limitiert ist, für die meisten Anwender aber ausreicht. Ansonsten könnt ihr euch jederzeit einen kostenlosen DockerHub Account einrichten.
Im DockerHub findet ihr viele bereits konfigurierte Container, die ihr nur noch geringfügig an eure Bedürfnisse anpassen müsst. Hier findet ihr auch den offiziellen Pi-hole Docker Container.
Um einen neuen Container hinzuzufügen, navigiert ihr über den Menüpunkt Containers in die Containerübersicht. Hier könnt ihr über den Button Add container einen neuen Docker Container erzeugen. Diesen Weg gehen wir in dieser Anleitung aber nicht.
Achtung: solltet ihr den Container über das DockerHub erzeugen, müsst ihr unbedingt noch alle benötigten Ports, Netzwerkeinstellungen, Dateifreigaben und Variablen festlegen. Das geht problemlos, ist aber recht mühselig. Einfacher geht die Erstellung eines Containers meiner Meinung nach über die Erstellung eines Templates, das eine Docker Compose Datei enthält. Diesen Weg zeige ich euch in dieser Anleitung.
Template (Vorlage) erstellen
Unter dem Menüpunkt App Templates und dann Custom Templates lassen sich eigene Templates konfigurieren. Hier werden die kompletten Einstellungen für den Container in einer so genannten Docker Compose Datei gespeichert. In dieser Datei werden Funktionen, Variablen und Netzwerk- und Dateieinstellungen vorgenommen die dann auf den Container angewendet werden.
Ich habe hier einfach ein Template mit dem Namen pi-hole und der folgenden Konfiguration erstellt. Der Zugriff auf die Weboberfläche von Pi-hole erfolgt bei mir über den Port 1080, da der Port 80 ja bereits von OpenMediaVault belegt ist. Ihr greift später auf den Container über die IP-Adresse eures NAS zu, daher dürfen die NAS-Ports hier nicht doppelt vergeben werden. Der Port 67 wird im Pi-hole Container nur benötigt, wenn Pi-hole später als DHCP-Server für euer Netzwerk dienen soll.
Alternativ zu dem Standard Docker Netzwerk, welches immer als Netzwerkbrücke (bridge) läuft, könnt ihr auch dedizierte IP-Adressen vergeben. Dann verhält sich der pihole Container so wie ein normaler Computer im Netzwerk. Da dies aber nicht die einfachste Möglichkeit ist, verwenden wir hier das Brückennetzwerk, der Pi-hole Container ist dann unter der IP-Adresse eures NAS erreichbar.
Die Variablen WEBPASSWORD sowie DNS1 müsst ihr an eure Bedürfnisse anpassen.
version: "3.9" services: pihole: container_name: pihole image: pihole/pihole:latest hostname: pihole ports: - "53:53/tcp" #DNS - "53:53/udp" #DNS - "67:67/udp" #DHCP/Bootstrap - "1080:80/tcp" #Pi-hole Weboberfläche - "10443:443/tcp" #Pi-hole Weboberfläche (SSL) environment: TZ: 'Europe/Berlin' WEBPASSWORD: 'DEINPASSWORT' #Dein Passwort für die Pi-hole Webverwaltung (frei wählbar) DNS1: '192.168.1.2' #Deine Router IP-Adresse DNS2: '' volumes: - './etc-dnsmasq.d/:/etc/dnsmasq.d/' - './etc-pihole/:/etc/pihole/' dns: -'127.0.0.1' #Der Pi-hole nutzt sich selbst als DNS-Server cap_add: - NET_ADMIN #Erlaubt das Bearbeiten von Netzwerkeinstellungen im Container restart: unless-stopped
Habt ihr das Template erstellt, könnt ihr dies nun öffnen und über Deploy the stack den Container installieren.
Docker Containerverwaltung
Unter dem Menüpunkt Containers findet ihr im Anschluss an die Installation euren neuen pihole Container.
Die Weboberfläche von Pi-hole erreicht ihr in eurem Browser über die IP-Adresse eures NAS gefolgt von einem :1080. Um Einstellungen in Pi-hole vorzunehmen, müsst ihr euch zunächst mit eurem Passwort (welches ihr über die WEBPASWORD Variable in der Docker Compose Datei festgelegt habt) anmelden.
Nachdem Pi-hole nun via Docker auf eurem NAS läuft, müsst ihr eure Clients so konfigurieren, dass diese den Pi-hole zur DNS-Auflösung nutzen. Das könnt ihr entweder in den DNS-Einstellungen jedes Clients manuell machen oder noch besser direkt in eurem Router (z.B. eurer Fritzbox) den Pi-hole als DNS-Server einstellen.
Wie dies im Detail funktioniert, haben wir bereits in unserer Pi-hole Anleitung auf einem Raspberry Pi 4 beschrieben. Da sich die Konfiguration identisch zu unserem Pi-hole Container verhält, könnt ihr diesen Teil der Anleitung nutzen.
Ad-Block Filterlisten in Pi-hole erweitern
Im Standard kommt Pi-hole mit einfachen Blocklisten, die ca. 130.000 Domains blockieren. Ihr könnt die Filterung durch den Pi-hole noch deutlich erweitern, indem ihr neue Blocklisten einbindet. Wie dies geht, haben wir in unserer Anleitung Neue Ad-Block Filterlisten in Pi-hole einbinden beschrieben.
Bei Links, die mit einem * gekennzeichnet sind, handelt es sich um Affiliate-Links, bei denen wir bei einem Kauf eine Vergütung durch den Anbieter erhalten.
Kommentare (27)
Stefan (Team)
05.02.2024
@IchDuErSieEs: Danke für die Info, ich werde das im Artikel ändern. Das ist bei Linux leider immer so eine Sache, kaum kommt eine neue Version kann ein Code nicht mehr korrekt funktionieren.
IchDuErSieEs
04.02.2024
so, nach einigem Herumprobieren läuft das Ding.
Zuerst hatte ich mit dem aktuellen OMV-Docker-Compose PiHole Example File auch keinen Erfolg, Ergebnis war ähnlich.
Schlussendlich habe ich das File aber hergenommen und die unten stehenden Informationen ergänzt
Ob es an den Formatierungen lag hab ich nachträglich nicht ausprobiert, das so eigentlich gleich aus-
Die wesentliche Änderung war aber statt
dns:
- 127.0.0.1
dns: '127.0.0.1'
einzutragen
Zuerst hatte ich mit dem aktuellen OMV-Docker-Compose PiHole Example File auch keinen Erfolg, Ergebnis war ähnlich.
Schlussendlich habe ich das File aber hergenommen und die unten stehenden Informationen ergänzt
Ob es an den Formatierungen lag hab ich nachträglich nicht ausprobiert, das so eigentlich gleich aus-
Die wesentliche Änderung war aber statt
dns:
- 127.0.0.1
dns: '127.0.0.1'
einzutragen
IchDuErSieEs
02.02.2024
Auch bei mir kommt der Fehler:
failed to deploy a stack: services.capadd must be a mapping
installiert ist das aktuelle OMV6 nach Deiner Anleitung.
Hat soweit geklappt, auch wenn inzwischen schon einiges anders ist.
Hier komm ich aber nicht weiter?!?
failed to deploy a stack: services.capadd must be a mapping
installiert ist das aktuelle OMV6 nach Deiner Anleitung.
Hat soweit geklappt, auch wenn inzwischen schon einiges anders ist.
Hier komm ich aber nicht weiter?!?
Cihan
02.12.2023
Ich erhalte ebenfalls die Fehlermeldung
failed to deploy a stack: services.capadd must be a mapping
und schließe mich somit der Frage von Andre an.
An der Stelle auch ein Dank von mir für das Tutorial :)
failed to deploy a stack: services.capadd must be a mapping
und schließe mich somit der Frage von Andre an.
An der Stelle auch ein Dank von mir für das Tutorial :)
handmade
10.11.2023
Hallo,
vorab auch von mir ein Lob für die tolle Anleitung.
Ich habe leider folgende Situation seitdem pihole aktiv ist: alle meine Clients laufen problemlos und nutzen pihole, allerdings bekomme ich seitdem keine Ping-Antwort über z.B. ping -c 4 google.com auf dem OMV Host selbst (ein ping direkt über 8.8.8.8 funktioniert). Ich habe auch die /etc/systemd/resolved.conf nach deiner Anleitung angepasst und zudem unter dem OMV GUI als zusätzlichen DNS Server 8.8.8.8 eingetragen. All dies führt nicht zum Erfolg mit der Folge das mein OMV keine Updates mehr erhält. Wenn ich in meinem Router das Gateway wieder auf ihn selbst umleite und nicht auf die pihole ip, dann läuft auch der ping wieder auf dem OMV Host. Ich nutze derzeit OMV Version 6.8.0.1 mit dem Kernel 6.1.21-v8+ auf meinem Raspberry-PI 4. Hat jemand dazu eine Idee?
vorab auch von mir ein Lob für die tolle Anleitung.
Ich habe leider folgende Situation seitdem pihole aktiv ist: alle meine Clients laufen problemlos und nutzen pihole, allerdings bekomme ich seitdem keine Ping-Antwort über z.B. ping -c 4 google.com auf dem OMV Host selbst (ein ping direkt über 8.8.8.8 funktioniert). Ich habe auch die /etc/systemd/resolved.conf nach deiner Anleitung angepasst und zudem unter dem OMV GUI als zusätzlichen DNS Server 8.8.8.8 eingetragen. All dies führt nicht zum Erfolg mit der Folge das mein OMV keine Updates mehr erhält. Wenn ich in meinem Router das Gateway wieder auf ihn selbst umleite und nicht auf die pihole ip, dann läuft auch der ping wieder auf dem OMV Host. Ich nutze derzeit OMV Version 6.8.0.1 mit dem Kernel 6.1.21-v8+ auf meinem Raspberry-PI 4. Hat jemand dazu eine Idee?
Stefan (Team)
22.08.2023
Sorry micha, das gibt HTML nicht her, da müsste man richtigen Code in den Kommentaren zu lassen, was aber zu gefährlich ist.
micha
22.08.2023
Schade das in meinem Kommentar "Installieren vom pihole-Container im neuen Compose-Plugin von OMV ohne Verwendung von Portainer" die Leerstellen des pihole Compose File (yml) nicht vernüftig übernommen wurde. Ich versuche es nochmal hier. In der begrenzten Hoffnung das der Web-admin das richtig über nimmt. Ansonsten nutzt das keinem was!!!
micha
20.08.2023
Installieren vom pihole-Container im neuen Compose-Plugin von OMV ohne Verwendung von Portainer:
Über SSH in OMV einloggen und folgende Befehle im Terminal eingeben:
sudo sed -i "s/#Cache=yes/Cache=no/g" /etc/systemd/resolved.conf
sudo sed -i "s/#DNSStubListener=yes/DNSStubListener=no/g" /etc/systemd/resolved.conf
dann entweder OMV neu starten oder systemd-resolved neu starten:
systemctl restart systemd-resolved
Mit dem Befehl sudo ip addr show ermitteln wir die Netzwerkschnittstelle und notieren sie uns. Die brauchen wir später für das Erstellen des VLan.
Dann erstellen wir die Ordner appdata, compose, pihole, etc-pihole und etc-dnsmasq.d mit den Befehlen.
cd /
sudo mkdir appdata
sudo mkdir compose
cd appdata
sudo mkdir pihole
cd pihole
sudo mkdir etc-pihole
sudo mkdir etc-dnsmasq.d
In diesem Beispiel ist das System auf der Partition sda2. Die Efi-Bootpartition befindet sich auf sda1
Arbeiten auf der Web-Oberfläche von OMV:
Unter OMV/System/omv-extras muss das Docker-repo aktiviert und der Compose Plugin in OMV installiert werden. Da ich nur drei Container benutze verwende ich für die Docker-Ordner das Systemlaufwerk auf dem sich OMV befindet. Das ist bei mir mit 120GB ausreichend groß. Über den OMV Backup-Plugin sichere ich die System SSD nach jeder größeren Veränderung am System. Da ist dann alles was mit Docker zusammenhängt mit gesichert. Damit erspare ich mir das Erstellen eines Backup-Ordners unter OMV/Dienste/Compose/Einstellungen für die Container. Um das Systemlaufwerk unter OMV/Datenspeicher/Dateisysteme benutzen zu können muss man unter OMV/System/Erweiterungen das Plugin OMV-Sharerootfs installieren und aktivieren.
Als nächstes unter OMV/Datenspeicher/Freigegebene Ordner die zwei auf dem Systemlaufwerk erstellten Ordner appdata und compose einbinden
Unter OMV/Dienste/Compose/Einstellungen unter Compose Files das erstellte Laufwerk compose und unter Data das erstellte Laufwerk appdata auswählen. Alles andere kann so bleiben wie es ist. Danach speichern und bestätigen. Sicherheitshalber bzw. wenn ein Fehler kommt unten Reinstall Docker anklicken und bestätigen. Wenn alles fehlerfrei verlaufen ist sicherheitshalber das System neu starten. Im Browser den Cache leeren und die OMV-Weboberfläche von OMV aufrufen.
In meinem Beispiel ist die Netzwerkschnittstelle die ich am Anfang mit sudo ip addr show ermittelt habe enp1s0. Ich verwende in dem Beispiel eine Fritzbox als Router mit der lokalen IP 192.168.178.1 .Falls ein anderer Router und/oder ein anderer lokaler Netzbereich genutzt wird muss das dementsprechend angepasst werden. Als nächstes erstellen wir unter OMV/Dienste/Compose/Networks eine VLan-Netzwerkschnittstelle. Die Plus-Schaltfläche anklicken, dann einen Namen eintragen (ich nenne sie in dem Beispiel pinet), unter Driver macvlan auswählen, unter Parent network die vorhandene Netzwerkschnittstelle (in diesen Beispiel enp1s0) auswählen, unter Subnet 192.168.178.0/24 (Abdeckung des Adressbereiches der durch die in den Beispiel genutzte Fritzbox abgedeckt wird), unter Gateway 192.168.178.1 (lokale Adresse der Fritzbox) und unter IP-rage z.B. 192.168.178.80/29 eintragen. Dann sichern und bestätigen. Erläuterung zu IP-rage: Mit diesen Eintrag (/29) können wir bis zu 6 Containern IP-Adressen, beginnend mit 192.168.178.81 zuweisen. Der Bereich muss allerdings in der Fritzbox frei sein und nicht durch andere lokale Geräte genutzt werden. Die erstellte VLan-Schnittstelle hat den großen Vorteil das man jeden Container eine eigene IP zuweisen kann. Das vermeidet Port-Konflikte.
Nachdem die VLan-Schnittstelle (bzw. Macvlan) erstellt wurde können wir uns an die Erstellung des pihole Containers machen. Unter OMV/Dienste/Compose/Files die Plus-Schaltfläche anklicken, Namen und Beschreibung vergeben (pihole/Werbeblocker) und unter File folgendes eintragen:
version: "3"
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
pihole:
containername: pihole
image: pihole/pihole:latest
# For DHCP it is recommended to remove these ports and instead add: networkmode: "host"
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
- "80:80/tcp"
hostname: pihole
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'xxx'
# Volumes store your data between container upgrades
volumes:
- '/appdata/pihole/etc-pihole:/etc/pihole'
- '/appdata/pihole/etc-dnsmasq.d:/etc/dnsmasq.d'
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
restart: unless-stopped
networks:
pinet:
ipv4address: 192.168.178.81
networks:
pinet:
external: true
Für xxx unter WEBPASSWORD das eigene Passwort für die Web-Oberfläche von pihole eintragen. Die Leerstellen müssen exakt simmen. Am besten noch mit anderen compose-Beispielen im Netz vergleichen. Danach speichern und bestätigen. Unter OMV/Dienste/Compose/Files pihole anklicken, auf die Schaltfläche mit dem Pfeil nach oben klicken und wenn man Glück hat wird der pihole Container erstellt und gestartet.
Aufgerufen wird die Web-Oberfläche von pihole in diesem Beispiel mit der Adresse:
http://192.168.178.81/admin
Über SSH in OMV einloggen und folgende Befehle im Terminal eingeben:
sudo sed -i "s/#Cache=yes/Cache=no/g" /etc/systemd/resolved.conf
sudo sed -i "s/#DNSStubListener=yes/DNSStubListener=no/g" /etc/systemd/resolved.conf
dann entweder OMV neu starten oder systemd-resolved neu starten:
systemctl restart systemd-resolved
Mit dem Befehl sudo ip addr show ermitteln wir die Netzwerkschnittstelle und notieren sie uns. Die brauchen wir später für das Erstellen des VLan.
Dann erstellen wir die Ordner appdata, compose, pihole, etc-pihole und etc-dnsmasq.d mit den Befehlen.
cd /
sudo mkdir appdata
sudo mkdir compose
cd appdata
sudo mkdir pihole
cd pihole
sudo mkdir etc-pihole
sudo mkdir etc-dnsmasq.d
In diesem Beispiel ist das System auf der Partition sda2. Die Efi-Bootpartition befindet sich auf sda1
Arbeiten auf der Web-Oberfläche von OMV:
Unter OMV/System/omv-extras muss das Docker-repo aktiviert und der Compose Plugin in OMV installiert werden. Da ich nur drei Container benutze verwende ich für die Docker-Ordner das Systemlaufwerk auf dem sich OMV befindet. Das ist bei mir mit 120GB ausreichend groß. Über den OMV Backup-Plugin sichere ich die System SSD nach jeder größeren Veränderung am System. Da ist dann alles was mit Docker zusammenhängt mit gesichert. Damit erspare ich mir das Erstellen eines Backup-Ordners unter OMV/Dienste/Compose/Einstellungen für die Container. Um das Systemlaufwerk unter OMV/Datenspeicher/Dateisysteme benutzen zu können muss man unter OMV/System/Erweiterungen das Plugin OMV-Sharerootfs installieren und aktivieren.
Als nächstes unter OMV/Datenspeicher/Freigegebene Ordner die zwei auf dem Systemlaufwerk erstellten Ordner appdata und compose einbinden
Unter OMV/Dienste/Compose/Einstellungen unter Compose Files das erstellte Laufwerk compose und unter Data das erstellte Laufwerk appdata auswählen. Alles andere kann so bleiben wie es ist. Danach speichern und bestätigen. Sicherheitshalber bzw. wenn ein Fehler kommt unten Reinstall Docker anklicken und bestätigen. Wenn alles fehlerfrei verlaufen ist sicherheitshalber das System neu starten. Im Browser den Cache leeren und die OMV-Weboberfläche von OMV aufrufen.
In meinem Beispiel ist die Netzwerkschnittstelle die ich am Anfang mit sudo ip addr show ermittelt habe enp1s0. Ich verwende in dem Beispiel eine Fritzbox als Router mit der lokalen IP 192.168.178.1 .Falls ein anderer Router und/oder ein anderer lokaler Netzbereich genutzt wird muss das dementsprechend angepasst werden. Als nächstes erstellen wir unter OMV/Dienste/Compose/Networks eine VLan-Netzwerkschnittstelle. Die Plus-Schaltfläche anklicken, dann einen Namen eintragen (ich nenne sie in dem Beispiel pinet), unter Driver macvlan auswählen, unter Parent network die vorhandene Netzwerkschnittstelle (in diesen Beispiel enp1s0) auswählen, unter Subnet 192.168.178.0/24 (Abdeckung des Adressbereiches der durch die in den Beispiel genutzte Fritzbox abgedeckt wird), unter Gateway 192.168.178.1 (lokale Adresse der Fritzbox) und unter IP-rage z.B. 192.168.178.80/29 eintragen. Dann sichern und bestätigen. Erläuterung zu IP-rage: Mit diesen Eintrag (/29) können wir bis zu 6 Containern IP-Adressen, beginnend mit 192.168.178.81 zuweisen. Der Bereich muss allerdings in der Fritzbox frei sein und nicht durch andere lokale Geräte genutzt werden. Die erstellte VLan-Schnittstelle hat den großen Vorteil das man jeden Container eine eigene IP zuweisen kann. Das vermeidet Port-Konflikte.
Nachdem die VLan-Schnittstelle (bzw. Macvlan) erstellt wurde können wir uns an die Erstellung des pihole Containers machen. Unter OMV/Dienste/Compose/Files die Plus-Schaltfläche anklicken, Namen und Beschreibung vergeben (pihole/Werbeblocker) und unter File folgendes eintragen:
version: "3"
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
pihole:
containername: pihole
image: pihole/pihole:latest
# For DHCP it is recommended to remove these ports and instead add: networkmode: "host"
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
- "80:80/tcp"
hostname: pihole
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'xxx'
# Volumes store your data between container upgrades
volumes:
- '/appdata/pihole/etc-pihole:/etc/pihole'
- '/appdata/pihole/etc-dnsmasq.d:/etc/dnsmasq.d'
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
restart: unless-stopped
networks:
pinet:
ipv4address: 192.168.178.81
networks:
pinet:
external: true
Für xxx unter WEBPASSWORD das eigene Passwort für die Web-Oberfläche von pihole eintragen. Die Leerstellen müssen exakt simmen. Am besten noch mit anderen compose-Beispielen im Netz vergleichen. Danach speichern und bestätigen. Unter OMV/Dienste/Compose/Files pihole anklicken, auf die Schaltfläche mit dem Pfeil nach oben klicken und wenn man Glück hat wird der pihole Container erstellt und gestartet.
Aufgerufen wird die Web-Oberfläche von pihole in diesem Beispiel mit der Adresse:
http://192.168.178.81/admin
Danny
11.05.2023
Das Template funktioniert nicht! Ich habe es einfach wie weiter oben auf der Seite beschrieben gemacht, dort wo steht "Diesen Weg gehen wir in dieser Anleitung aber nicht". Einfach die Werte vom Template dann von Hand eintippen. Geht einwandfrei!
GoogleAds werde leider nicht geblockt. Ich denke es liegt an fehlendem IPv6.
Wie ist das mit IPv6 ? Jemand eine Idee? IPv6 DNS vom Pi-Hole ?
GoogleAds werde leider nicht geblockt. Ich denke es liegt an fehlendem IPv6.
Wie ist das mit IPv6 ? Jemand eine Idee? IPv6 DNS vom Pi-Hole ?
Stefan (Team)
31.03.2023
Danke, da war meine Formulierung wohl unglücklich :)
pit
25.03.2023
Kleine Korrektur:
@Stefan schreibt:
Die Weboberfläche von Pi-hole erreicht ihr in eurem Browser über die IP-Adresse eures NAS gefolgt von einem :1080
Ruft man diese Adresse auf, landet man auf einer "Placeholder page", die vom lighthttpd Webserver ausgespielt wird. Um den pi-hole zu erreichen, fehlt in der URL ein /admin .
Korrekt wäre demnach:
Die Weboberfläche von Pi-hole erreicht ihr in eurem Browser über die IP-Adresse eures NAS gefolgt von einem :1080/admin
@Stefan schreibt:
Die Weboberfläche von Pi-hole erreicht ihr in eurem Browser über die IP-Adresse eures NAS gefolgt von einem :1080
Ruft man diese Adresse auf, landet man auf einer "Placeholder page", die vom lighthttpd Webserver ausgespielt wird. Um den pi-hole zu erreichen, fehlt in der URL ein /admin .
Korrekt wäre demnach:
Die Weboberfläche von Pi-hole erreicht ihr in eurem Browser über die IP-Adresse eures NAS gefolgt von einem :1080/admin
Stefan (Team)
26.02.2023
@manuel mir ist da nix negativ aufgefallen. Zur Not lässt sich die Änderung ja jederzeit rückgängig machen, sollten da irgendwelche Probleme auftauchen.
manuel
25.02.2023
Da man den DNS Server verstellt, passiert da was wenn man den Server mal abschaltet?
Also kommt man noch mit den Geräten ins Internet?
Also kommt man noch mit den Geräten ins Internet?
pit
13.02.2023
@cali:
> Nur komme ich nicht auf die Weboberfläche.
> Dann erscheint nur die "Placeholder page"
Die Adresse für den pi.hole im Container lautet:
IP-Adresse Doppelpunkt Port (hier 1010) Slash admin
Bsp.: 192.168.0.100:1080/admin
> Nur komme ich nicht auf die Weboberfläche.
> Dann erscheint nur die "Placeholder page"
Die Adresse für den pi.hole im Container lautet:
IP-Adresse Doppelpunkt Port (hier 1010) Slash admin
Bsp.: 192.168.0.100:1080/admin
pit
13.02.2023
Leider stimmt das Template nicht - bzw. hat es dem Autor beim copy/paste in den CMS Editor die Einrückungen (Leerzeichen) zerhauen. Bin nach längerem trial & error mit dieser Variante zum Ziel gekommen:
https://paste.debian.net/1270618/
Trotzdem Danke an @Stefan!
https://paste.debian.net/1270618/
Trotzdem Danke an @Stefan!
Cali
12.02.2023
Hallo Leute,
ich hab es hinbekommen, den pihole laufen zu lassen. Dank eurer Kommentare. Nur komme ich nicht auf die Weboberfläche. Dann erscheint nur die "Placeholder page"
Was mache ich da falsch???
ich hab es hinbekommen, den pihole laufen zu lassen. Dank eurer Kommentare. Nur komme ich nicht auf die Weboberfläche. Dann erscheint nur die "Placeholder page"
Was mache ich da falsch???
Christian
15.01.2023
Anscheinend wird die Einrückung der Zeilen im Template in der Browser-Einstellung nicht gut wiedergegeben. Bei mir hat gerade geholfen, die Einrückung der Zeilen anhand anderer Template-Beispiele im Netz anzupassen (Beispiel: ports steht auf der gleichen Stufe wie hostname). Wirklich geholfen hat aber evtl. auch das Entfernen diverser Anführungszeichen im Template, u.a. bei ports und volumes). Danach liess sich das Template ohne Fehlermeldung deployen und der Container startete.
norga
10.01.2023
jup, da passte etwas mit den Leerstellen nicht.... so hat Docker nicht mehr gemeckert (OMV6)
version: "3.9"
services:
pihole:
containername: pihole
image: pihole/pihole:latest
hostname: pihole
ports:
- "53:53/tcp" #DNS
- "53:53/udp" #DNS
- "1080:80/tcp" #Pi-hole Weboberfläche
- "10443:443/tcp" #Pi-hole Weboberfläche (SSL)
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'meinP@ssw0rd!' #Dein Passwort für die Pi-hole Webverwaltung (frei wählbar)
DNS1: '192.168.1.1' #Deine Router IP-Adresse
DNS2: ''
volumes:
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
- './etc-pihole/:/etc/pihole/'
dns:
- 127.0.0.1 #Der Pi-hole nutzt sich selbst als DNS-Server
capadd:
- NETADMIN #Erlaubt das Bearbeiten von Netzwerkeinstellungen im Container
restart: unless-stopped
version: "3.9"
services:
pihole:
containername: pihole
image: pihole/pihole:latest
hostname: pihole
ports:
- "53:53/tcp" #DNS
- "53:53/udp" #DNS
- "1080:80/tcp" #Pi-hole Weboberfläche
- "10443:443/tcp" #Pi-hole Weboberfläche (SSL)
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'meinP@ssw0rd!' #Dein Passwort für die Pi-hole Webverwaltung (frei wählbar)
DNS1: '192.168.1.1' #Deine Router IP-Adresse
DNS2: ''
volumes:
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
- './etc-pihole/:/etc/pihole/'
dns:
- 127.0.0.1 #Der Pi-hole nutzt sich selbst als DNS-Server
capadd:
- NETADMIN #Erlaubt das Bearbeiten von Netzwerkeinstellungen im Container
restart: unless-stopped
Markus
08.01.2023
Der Fehler tritt bei mir auf. Vielleicht erst mal dieses Tutorial vom Netz nehmen, ansonsten ist das doch etwas frustrierend. Wenn es einen Workaround gibt, den bitte nachpflegen.
micha
01.12.2022
Ich habe das nicht hinbekommen (besser gesagt bei mir funktioniert das aus was weis ich für welchen Gründen nicht) und dann PiHole direkt auf die OMV-Nas installiert (ohne Docker). Da auf dem kleinen J4105-Rechner nur OMV und PiHole laufen habe ich Docker/Portainer deinstalliert.
OMV und PiHole zusammen auf der NAS
PiHole auf einen laufenden OMV-System über ssh installieren:
sudo apt-get update && sudo apt-get upgrade -y
Falls curl noch nicht installiert ist:
sudo apt install curl
PiHole installieren:
sudo curl -sSL https://install.pi-hole.net | bash
OMV:
Unter System/Workbench muss der Port 80 in einen anderen Port (z.B.: 1080) und bei Verwendung von der sicheren Verbindung Port 443 in ... geändert werden. Die Web-Oberfläche von OMV muss in dem Beispiel mit IP:1080 (z.B.: http://192.168.0.44:1080 ) gestartet werden. Weboberfläche PiHole wird in dem Beispiel mit http://192.168.0.44/admin gestartet.
System/ssh:
Ins Terminal über ssh nacheinander eingeben:
sudo sed -i "s/#Cache=yes/Cache=no/g" /etc/systemd/resolved.conf
sudo sed -i "s/#DNSStubListener=yes/DNSStubListener=no/g" /etc/systemd/resolved.conf
dann entweder neu starten oder systemd-resolved neu starten:
systemctl restart systemd-resolved
Ob es Probleme mit Port 67, den PiHole als DHCP-Server verwendet, gibt weis ich nicht da ich den DHCP-Server von PiHole nicht benötige und auch nicht eingeschaltet habe.
OMV und PiHole zusammen auf der NAS
PiHole auf einen laufenden OMV-System über ssh installieren:
sudo apt-get update && sudo apt-get upgrade -y
Falls curl noch nicht installiert ist:
sudo apt install curl
PiHole installieren:
sudo curl -sSL https://install.pi-hole.net | bash
OMV:
Unter System/Workbench muss der Port 80 in einen anderen Port (z.B.: 1080) und bei Verwendung von der sicheren Verbindung Port 443 in ... geändert werden. Die Web-Oberfläche von OMV muss in dem Beispiel mit IP:1080 (z.B.: http://192.168.0.44:1080 ) gestartet werden. Weboberfläche PiHole wird in dem Beispiel mit http://192.168.0.44/admin gestartet.
System/ssh:
Ins Terminal über ssh nacheinander eingeben:
sudo sed -i "s/#Cache=yes/Cache=no/g" /etc/systemd/resolved.conf
sudo sed -i "s/#DNSStubListener=yes/DNSStubListener=no/g" /etc/systemd/resolved.conf
dann entweder neu starten oder systemd-resolved neu starten:
systemctl restart systemd-resolved
Ob es Probleme mit Port 67, den PiHole als DHCP-Server verwendet, gibt weis ich nicht da ich den DHCP-Server von PiHole nicht benötige und auch nicht eingeschaltet habe.
Jeti
19.11.2022
So funktioniert es bei mir.
Die Leerzeichen vor den Sätzen sind da wichtig. Sehen zwar irgendwie gleich aus, sind es aber nicht.
version: "3.9"
services:
pihole:
containername: pihole
image: pihole/pihole:latest
hostname: pihole
ports:
- "53:53/tcp" #DNS
- "53:53/udp" #DNS
- "67:67/udp" #DHCP/Bootstrap
- "1080:80/tcp" #Pi-hole Weboberfläche
- "10443:443/tcp" #Pi-hole Weboberfläche (SSL)
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'DEINPASSWORT' #Dein Passwort für die Pi-hole Webverwaltung (frei wählbar)
DNS1: '192.168.1.2' #Deine Router IP-Adresse
DNS2: ''
volumes:
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
- './etc-pihole/:/etc/pihole/'
dns:
- 127.0.0.1 #Der Pi-hole nutzt sich selbst als DNS-Server
capadd:
- NETADMIN #Erlaubt das Bearbeiten von Netzwerkeinstellungen im Container
restart: unless-stopped
Die Leerzeichen vor den Sätzen sind da wichtig. Sehen zwar irgendwie gleich aus, sind es aber nicht.
version: "3.9"
services:
pihole:
containername: pihole
image: pihole/pihole:latest
hostname: pihole
ports:
- "53:53/tcp" #DNS
- "53:53/udp" #DNS
- "67:67/udp" #DHCP/Bootstrap
- "1080:80/tcp" #Pi-hole Weboberfläche
- "10443:443/tcp" #Pi-hole Weboberfläche (SSL)
environment:
TZ: 'Europe/Berlin'
WEBPASSWORD: 'DEINPASSWORT' #Dein Passwort für die Pi-hole Webverwaltung (frei wählbar)
DNS1: '192.168.1.2' #Deine Router IP-Adresse
DNS2: ''
volumes:
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
- './etc-pihole/:/etc/pihole/'
dns:
- 127.0.0.1 #Der Pi-hole nutzt sich selbst als DNS-Server
capadd:
- NETADMIN #Erlaubt das Bearbeiten von Netzwerkeinstellungen im Container
restart: unless-stopped
Stefan (Team)
08.11.2022
Das hört sich ja nach einem Bug in OpenMediaVault 6 an. Muss dann mit einem Update gekommen sein, als ich es getestet hatte, funktionierte das einwandfrei.
Postet den Fehler doch im Bugtracker von OMV.
Postet den Fehler doch im Bugtracker von OMV.
Thoma5
06.11.2022
selbes Problem hier!
Deployment error failed to deploy a stack: services.capadd must be a mapping
Alle OMV 6 update eingespielt.
Damit für mich leider unbrauchbar.
Deployment error failed to deploy a stack: services.capadd must be a mapping
Alle OMV 6 update eingespielt.
Damit für mich leider unbrauchbar.
andi
06.11.2022
habe auch die Fehlermeldung "failed to deploy a stack: services.capadd must be a mapping"nwelche Leerstellen soll ich ändern ??
me
01.10.2022
Hi
die Meldung hatte ich auch
Ich konnte es nur beheben indem ich alle Leerstellen neu gemacht habe.
Also alle Löschen und zwei bzw vier Leerstellen einfügen.
die Meldung hatte ich auch
Ich konnte es nur beheben indem ich alle Leerstellen neu gemacht habe.
Also alle Löschen und zwei bzw vier Leerstellen einfügen.
Stefan (Team)
09.09.2022
Ist dein Linux auf dem neusten Stand ? Hört sich so an als ob Docker versucht einen Dienst zu registrieren aber dabei am OS scheitert
Andr?
08.09.2022
Bei mir erscheint die Fehlermeldung nach dem Erstellen des Templates (Schaltfläche "Deploy the stack")
Deployment error
failed to deploy a stack: services.capadd must be a mapping
irgendjemand eine Idee woran es liegen könnte?
Deployment error
failed to deploy a stack: services.capadd must be a mapping
irgendjemand eine Idee woran es liegen könnte?
Diesen Artikel kommentieren:
Hinweis:
- Nur Fragen / Antworten direkt zum Artikel
- Kein Support für andere Hard- oder Software !
Spamfreies E-Mail Abo nur bei neuen Artikeln