PiHole desde docker

Share this post on:
Instalar Pi-hole en un contenedor Docker y configurarlo con systemd para que se inicie automáticamente es la mejor manera de asegurar que tu servidor DNS sea robusto y persistente tras reinicios en Ubuntu.

1. Preparar Ubuntu (Liberar el puerto 53)

Ubuntu usa systemd-resolved por defecto en el puerto 53, lo que impedirá que Pi-hole se inicie. Debes desactivar el “DNS Stub Listener”. [1, 2, 3]
  1. Edita la configuración de resolved:
    sudo nano /etc/systemd/resolved.conf
    
  2. Descomenta y cambia la línea DNSStubListener a no:
    DNSStubListener=no
    
  3. Crea un enlace simbólico para que el sistema use un archivo resolv.conf estático:
    sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    sudo systemctl restart systemd-resolved
    

    [3, 4, 5]

Para instalar Pi-hole directamente desde Docker Hub sin usar archivos externos (como Docker Compose), puedes usar un comando docker run que configure todo en un solo paso.

1. Comando de instalación (Docker Run)

Ejecuta este comando en tu terminal de Ubuntu (asegúrate de haber liberado el puerto 53 previamente, como vimos antes):
docker run -d \
  --name pihole \
  -p 53:53/tcp -p 53:53/udp \
  -p 8088:80/tcp \
  -e TZ="America/Bogota" \
  -e WEBPASSWORD="tu_contrasena_aqui" \
  -v "$(pwd)/etc-pihole:/etc/pihole" \
  -v "$(pwd)/etc-dnsmasq.d:/etc/dnsmasq.d" \
  --restart=unless-stopped \
  pihole/pihole:latest

2. Explicación de los parámetros:

  • -d: Ejecuta el contenedor en segundo plano (detached).
  • --name pihole: Le da un nombre fácil de recordar para gestionarlo.
  • -p 53:53/tcp -p 53:53/udp: Mapea los puertos DNS del contenedor a tu Ubuntu.
  • -p 8088:8088/tcp: Mapea el acceso a la interfaz web.
  • -e WEBPASSWORD: Establece la clave para entrar al panel /admin.
  • -v ...: Crea “volúmenes” para que tu configuración no se borre si el contenedor se actualiza o se detiene.
  • --restart=unless-stopped: Configuración nativa de Docker para que Pi-hole inicie automáticamente al encender el PC.

3. Integración con systemd (Opcional pero recomendado)

Si prefieres que sea systemd quien gestione el ciclo de vida del contenedor (como pediste antes), el archivo del servicio sería así:
  1. Crea el archivo: sudo nano /etc/systemd/system/pihole-docker.service
  2. Configúralo para que use comandos de Docker directamente:
Edita tu archivo con sudo nano /etc/systemd/system/pihole-docker.service y déjalo exactamente así:
[Unit]
Description=Pi-hole Docker Container
# Asegura que Docker esté listo antes de intentar arrancar
After=docker.service
Requires=docker.service
# Si otros servicios dependen de este, esto ayuda a organizar el arranque
Before=network-online.target

[Service]
Restart=always
# Usamos 'start -a' para que systemd pueda monitorear el proceso correctamente
ExecStart=/usr/bin/docker start -a pihole
ExecStop=/usr/bin/docker stop pihole

[Install]
WantedBy=multi-user.target
  • docker start -a pihole: El parámetro -a (attach) hace que systemd se quede “enganchado” al proceso. Si el contenedor falla, systemd lo sabrá y lo reiniciará automáticamente.
  • No crea nada nuevo: Solo arranca el contenedor con el nombre pihole que ya existe en tu sistema (el que creaste con el comando docker run).
1. Cambiar la contraseña
Ejecuta este comando en tu terminal de Ubuntu:
bash
docker exec -it pihole pihole setpassword
Luego el sistema te pedirá que escribas y confirmes tu nueva contraseña.
  1. Habilítalo:
sudo systemctl daemon-reload
sudo systemctl enable pihole-docker.service
sudo systemctl start pihole-docker.service
Share this post on:

Leave a Reply

Your email address will not be published. Required fields are marked *