Über Pi-hole habe ich ja bereits ein Beitrag gemacht, nun schauen wir uns kurz an, wie wir Pi-hole mit Docker zum Laufen bekommen. Das ist relativ einfach.
Wir führen einfach folgende Befehle nacheinander aus:
sudo docker volume create etc-pihole && sudo docker volume create etc-dnsmasq.d
sudo docker run -d --name pihole -p 53:53/tcp -p 53:53/udp -p 67:67 -p 80:80 -p 443:443 -e TZ="Europe/Berlin" -v etc-pihole:/etc/pihole/ -v etc-dnsmasq.d:/etc/dnsmasq.d/ --dns=127.0.0.1 --dns=1.1.1.1 --restart=unless-stopped --hostname pi.hole -e VIRTUAL_HOST="pi.hole" -e PROXY_LOCATION="pi.hole" pihole/pihole:latest
Kurz erklärt:
Argument | Bedeutung |
---|---|
-d | Führt den Container im Hintergrund aus und gibt bei Abschluss die ID des Containers aus. |
–name pihole | Benennt den Container zu pihole. |
-p | Gibt die Ports 53 (DNS), 67 (DHCP), 80 (Webadmin), 443 (HTTPS Webadmin) am Hostsystem weiter und frei. |
-e TZ=“Europe/Berlin“ | Gibt die Zeitzone an. Für eine andere Zeitzone kann man im folgenden Wikibeitrag nachschauen: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones |
-v | Gibt entsprechenden Ordner auf dem Hostsystem frei, damit der Container Daten persistent speichern kann. |
–dns=127.0.0.1 | Gibt dem Container einen gezwungenen DNS Server an. In diesem Fall den Container pihole selber. |
–restart=unless-stopped | Der Container wird bei jedem Neustart des Hostsystems neu gestartet, außer er wurde manuell gestoppt. |
–hostname pi.hole | Der Container wird bei jedem Neustart des Hostsystems neu gestartet, außer er wurde manuell gestoppt. |
-e VIRTUAL_HOST=“pi.hole“ | Gibt dem Pi-hole Container mit, dass er unter pi.hole erreichbar ist. |
-e PROXY_LOCATION=“pi.hole“ | Keinen Eintrag im offiziellen Pi-hole Image dazu gefunden: https://hub.docker.com/r/pihole/pihole Gehe aber von aus, das damit der Webverkehr vom Container noch mal über den Container geleitet werden soll. |
pihole/pihole:latest | Der Imagename auf hub.docker.com |
Wenn ihr die ID des Containers seht, kann bereits über http:// HOST_IP /admin/ auf die Webadmin Oberfläche des Pi-hole zugegriffen werden. Nun benötigt man allerdings noch ein Admin Passwort. Dafür führt man in der Shell den Befehl aus.
sudo docker exec -it pihole bash
Somit bekommt man direkten Zugriff auf die Shell vom Container „pihole“.
Innerhalb der Shell sollte jetzt auch der Command-Prompt root@pi:/# zu sehen sein. Dann führt ihr den Befehl
sudo pihole -a -p
aus und nach Passworteingabe und Bestätigung kann die Shell mit dem Befehl „exit“ wieder geschlossen werden.
Für die weitere Konfigurationen des Pi-hole verweise ich mal gekonnt auf meinen Beitrag Pi-hole auf Raspberry Pi installieren und konfigurieren.
Docker-Compose
Ich bin dazu übergegangen vermehrt Docker-Compose Files zu verwenden, da da aktualisieren mit diesen Manifesten deutlich einfacher ist. Daher hier die Anleitung dafür:
- Zuallererst erstellt man im Home Verzeichnis die benötigten Ordner mit „mkdir etc-dnsmasq.d etc-pihole“.
- Mit „nano docker-compose.yml“ wird der Editor geöffnet und folgender Eintragung vorgenommen:
version: "3"
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
hostname: pi.hole
restart: always
dns:
- "127.0.0.1"
- "1.1.1.1"
volumes:
- ./etc-pihole:/etc/pihole/
- ./etc-dnsmasq.d:/etc/dnsmasq.d/
environment:
- TZ=Europe/Berlin
- VIRTUAL_HOST=pi.hole
- PROXY_LOCATION=pi.hole
ports:
- 80:80
- 53:53/tcp
- 53:53/udp
- Mit [STRG]+[O] und [STRG]+[X] speichert man die Datei und beendet den Editor.
- Anschließend ein schmackiges „sudo docker-compose up -d“ und Pi-Hole läuft.
Probleme mit Port 53
Solltet ihr Probleme haben den Container zu starten oder wird Port 53 auf einen anderen Port gelegt solltet ihr die Lösung im folgenden Link ausführen:
https://discourse.pi-hole.net/t/setup-on-pi-in-docker-bind-error/19137/5
pconwell:
Thank! Just updated from 16.04 to 18.04.4 LTS and ran into this. If anyone comes across this running Ubuntu 17.04+:
$ sudo nano /etc/systemd/resolved.conf
and change#DNSStubListener=yes
toDNSStubListener=no
(make sure you uncomment the line).$ sudo service systemd-resolved restart
EDIT: Spoke too soon. This DOES allow the container to boot up, but it breaks DNS for the host.
EDIT 2: Okay, here are the steps that work for ME. You may have different needs.
$ sudo nano /etc/systemd/resolved.conf
(make changes based on above)$ sudo service systemd-resolved restart
$ sudo systemctl disable systemd-resolved.service
$ sudo systemctl stop systemd-resolved
$ sudo rm /etc/resolv.conf
$ sudo shutdown now -r
I haven’t put much thought into this. You can probably actually skip the first two steps (I don’t have a good way to verify), however following the above steps fixed it so that (1) the container will boot, and (2) the host can resolve domain names.
https://discourse.pi-hole.net/t/setup-on-pi-in-docker-bind-error/19137/5
Der „Fehler“ taucht vor allem unter Ubuntu auf.
Update des Docker Pi-hole
Um den Pi-hole zu aktualisieren muss das alte Docker Image entfernt werden:
sudo docker rm -f pihole
sudo docker image rm pihole/pihole:latest
Anschließend wird einfach wieder der Docker Run Befehl von oben ausgeführt – fertig.