2026-02-15 23:42:25 +00:00
|
|
|
services:
|
|
|
|
|
pihole:
|
|
|
|
|
container_name: pihole
|
|
|
|
|
image: pihole/pihole:latest
|
|
|
|
|
hostname: pihole
|
2026-02-15 23:44:16 +00:00
|
|
|
domainname: ${DOMAIN_NAME} # your local domain name
|
2026-02-15 23:42:25 +00:00
|
|
|
#mac_address: de:ad:be:ef:ff:01 # can change or leave this
|
|
|
|
|
#cap_add: # only needed if doing DHCP
|
|
|
|
|
# - NET_ADMIN
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
secrets:
|
|
|
|
|
- piholepass
|
|
|
|
|
|
|
|
|
|
networks:
|
|
|
|
|
pihole_network: # same as network specified below
|
|
|
|
|
ipv4_address: ${Pihole_IP} # the IP of the pihole container
|
|
|
|
|
|
|
|
|
|
dns:
|
|
|
|
|
- 127.0.0.1 # use local DNS
|
|
|
|
|
|
|
|
|
|
ports:
|
|
|
|
|
- "53:53/tcp" #DNS
|
|
|
|
|
- "53:53/udp" #DNS
|
|
|
|
|
#- "67:67/udp" #DHCP
|
|
|
|
|
- "80:80/tcp" #HTTP
|
|
|
|
|
- "443:443/tcp" #HTTPS
|
|
|
|
|
|
|
|
|
|
volumes: # mount our data volumes.
|
|
|
|
|
- "/srv/docker/pihole/pihole:/etc/pihole"
|
|
|
|
|
- "/srv/docker/pihole/dnsmasq.d:/etc/dnsmasq.d"
|
|
|
|
|
|
|
|
|
|
environment: # set variables for pihole configuration.
|
|
|
|
|
ServerIP: ${Pihole_IP} # must match ipv4_address above
|
|
|
|
|
FTLCONF_LOCAL_IPV4: ${Pihole_IP}
|
|
|
|
|
PIHOLE_DNS_: ${Pihole_IP}
|
|
|
|
|
DNSSEC: "false"
|
2026-02-15 23:44:16 +00:00
|
|
|
VIRTUAL_HOST: ${SERVICE_NAME}.${DOMAIN_NAME} # Must be hostname + domainname from above
|
2026-02-15 23:42:25 +00:00
|
|
|
#WEBPASSWORD: "randompassword"
|
|
|
|
|
WEBPASSWORD_FILE: "/run/secrets/piholepass"
|
|
|
|
|
TZ: "America/Chicago"
|
2026-02-21 04:32:19 +00:00
|
|
|
labels:
|
|
|
|
|
### Auto create icon on Flame dashboard
|
|
|
|
|
- flame.type=application
|
|
|
|
|
- flame.name=${SERVICE_NAME}
|
|
|
|
|
- flame.url=https://${SERVICE_NAME}.${DOMAIN_NAME}
|
|
|
|
|
- flame.icon=https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/pi-hole.svg
|
|
|
|
|
### Enable Traefik
|
|
|
|
|
#- traefik.enable=true
|
|
|
|
|
#- traefik.docker.network=traefik_network
|
|
|
|
|
### For HTTP
|
|
|
|
|
#- traefik.http.routers.${SERVICE_NAME}.rule=Host(`${SERVICE_NAME}.${DOMAIN_NAME}`)
|
|
|
|
|
#- traefik.http.routers.${SERVICE_NAME}.entrypoints=web
|
|
|
|
|
### For HTTPS
|
|
|
|
|
#- traefik.http.routers.${SERVICE_NAME}-https.tls=true
|
|
|
|
|
#- traefik.http.routers.${SERVICE_NAME}-https.tls.certresolver=cloudflare
|
|
|
|
|
#- traefik.http.routers.${SERVICE_NAME}-https.entrypoints=websecure
|
|
|
|
|
#- traefik.http.routers.${SERVICE_NAME}-https.rule=Host(`${SERVICE_NAME}.${DOMAIN_NAME}`)
|
|
|
|
|
### Monitor with uptime-kuma
|
|
|
|
|
- kuma.monitoring.group.name=Docker Containers
|
|
|
|
|
- kuma.${SERVICE_NAME}.docker.parent_name=monitoring
|
|
|
|
|
- kuma.${SERVICE_NAME}.docker.name=${SERVICE_NAME}
|
|
|
|
|
- kuma.${SERVICE_NAME}.docker.type=docker
|
|
|
|
|
- kuma.${SERVICE_NAME}.docker.docker_container=${SERVICE_NAME}
|
|
|
|
|
- kuma.${SERVICE_NAME}.docker.docker_host=1
|
|
|
|
|
- 'kuma.${SERVICE_NAME}.docker.tag_names=[{"name": "docker_tag"}]'
|
2026-02-15 23:42:25 +00:00
|
|
|
|
|
|
|
|
secrets:
|
|
|
|
|
piholepass:
|
|
|
|
|
file: "/srv/docker/pihole/piholepass.txt"
|
|
|
|
|
|
|
|
|
|
networks:
|
|
|
|
|
pihole_network: # externally created network
|
|
|
|
|
external: true
|