Skip to main content

Instalar Pi Hole en docker

Para proceder con la instalación de Pi Hole en docker, primero debe instalar docker en el sistema operativo.

A continuación cree el directorio donde desea alojar el contenido, por ejemplo

mkdir -p /docker/pihole
cd /docker/pihole

Genere un fichero con el nombre docker-compose.yml e introduzca el siguiente contenido.

version: "3"

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    # Limit resources used
    mem_limit: 512m
    # For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "8001:80/tcp"
    environment:
      TZ: 'Europe/Madrid'
      WEBPASSWORD: 'LsJXMbG'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
      # Para poder capturar los logs con Filebeat o Elastic Agent mapeamos tambien la carpeta VAR-LOG
      - './var-log-pihole:/var/log/pihole'
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    dns:
      - 127.0.0.1
      - 9.9.9.11
    cap_add:
      - NET_ADMIN # Recommended but not required (DHCP needs NET_ADMIN)
    restart: unless-stopped

Revise la configuración de los puertos, en este ejemplo el puerto 8001 será el puerto accesible de gestión web.

Configure el Timezone (TZ) con la localización del pais donde va a instalar el sistema PiHole o el Timezone que le sea mas cómodo.

El parámetro WEBPASSWORD es la contraseña de la web de gestión. Modifiquela por una diferente y mayor longitud.

En DNS introduzca los servidor DNS a los que quiere reenviar las peticiones en caso de que el propio sistema PiHole no las conozca.

Finalmente, ejecute el proceso de instalación del sistema docker con el siguiente comando

cd /root/pihole
docker-compose up -d

Podrá ver como se descargan las imágenes del sistema docker necesarias para poner en funcionamiento el contenedor de Pi Hole.

Una vez haya finalizado y aparezca el mensaje Creating pihole ... done ya podrá acceder a la web de gestión usando un navegador y accediendo a

http://ip_del_equipo_con_docker:8001/admin/

image-1670677115243.png

Si al intentar ejecutar el PiHole da el siguiente error

Creating pihole ...
Creating pihole ... error

ERROR: for pihole  Cannot start service pihole: driver failed programming external connectivity on endpoint pihole (1748f2f183ed864c94512606f0ffe3b7b006e8d95007677999e1929f1bb47d17): Error starting userland proxy: listen tcp4 0.0.0.0:53: bind: address already in use

ERROR: for pihole  Cannot start service pihole: driver failed programming external connectivity on endpoint pihole (1748f2f183ed864c94512606f0ffe3b7b006e8d95007677999e1929f1bb47d17): Error starting userland proxy: listen tcp4 0.0.0.0:53: bind: address already in use
ERROR: Encountered errors while bringing up the project.

Seguramente este ejecutandolo en un sistema Ubuntu (o sus variantes), por lo que debe desactivar en el fichero /etc/systemd/resolved.conf el parámetro DNSStubListener. La linea viene comentada y su configuracón por defecto es activado (yes), por lo que debe descomentar la linea y cambiar el valor a no

[Resolve]
# Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
# Google:     8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
# Quad9:      9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
#DNS=
#FallbackDNS=
#Domains=
#DNSSEC=no
#DNSOverTLS=no
#MulticastDNS=no
#LLMNR=no
#Cache=no-negative
#CacheFromLocalhost=no
DNSStubListener=no
#DNSStubListenerExtra=
#ReadEtcHosts=yes
#ResolveUnicastSingleLabel=no

A continuación, reinicie el servicio para que tenga los nuevos cambios

service systemd-resolved restart

Y pruebe de nuevo con el comando

docker-compose up -d