Pi-hole über Docker installieren

Ü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:

ArgumentBedeutung
-dFührt den Container im Hintergrund aus und gibt bei Abschluss die ID des Containers aus.
–name piholeBenennt den Container zu pihole.
-pGibt 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
-vGibt entsprechenden Ordner auf dem Hostsystem frei, damit der Container Daten persistent speichern kann.
–dns=127.0.0.1Gibt dem Container einen gezwungenen DNS Server an. In diesem Fall den Container pihole selber.
–restart=unless-stoppedDer Container wird bei jedem Neustart des Hostsystems neu gestartet, außer er wurde manuell gestoppt.
–hostname pi.holeDer 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:latestDer 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:

  1. Zuallererst erstellt man im Home Verzeichnis die benötigten Ordner mit “mkdir etc-dnsmasq.d etc-pihole”.
  2. 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
  1. Mit [STRG]+[O] und [STRG]+[X] speichert man die Datei und beendet den Editor.
  2. 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 to DNSStubListener=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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert