compose.yaml.j2 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. services:
  2. {{ service_name | default('pihole') }}:
  3. container_name: {{ container_name | default('pihole') }}
  4. image: docker.io/pihole/pihole:2025.08.0
  5. {% if ports_enabled %}
  6. ports:
  7. - "{{ ports_dns_tcp | default(53) }}:53/tcp"
  8. - "{{ ports_dns_udp | default(53) }}:53/udp"
  9. - "{{ ports_dhcp | default(67) }}:67/udp"
  10. - "{{ ports_http | default(8081) }}:80/tcp"
  11. - "{{ ports_https | default(8443) }}:443/tcp"
  12. {% endif %}
  13. environment:
  14. - TZ={{ container_timezone | default('UTC') }}
  15. {% if pihole_webpassword -%}
  16. - FTLCONF_webserver_api_password={{ pihole_webpassword }}
  17. {% endif %}
  18. - FTLCONF_dns_upstreams={{ pihole_dns_upstreams | default('8.8.8.8;8.8.4.4') }}
  19. volumes:
  20. - config_dnsmasq:/etc/dnsmasq.d
  21. - config_pihole:/etc/pihole
  22. {% if network_enabled %}
  23. networks:
  24. - {{ network_name | default('bridge') }}
  25. {% endif %}
  26. {% if traefik_enabled %}
  27. labels:
  28. - traefik.enable=true
  29. - traefik.http.routers.{{ service_name | default('pihole') }}.rule=Host(`{{ traefik_host }}`)
  30. {% if traefik_tls_enabled %}
  31. - traefik.http.routers.{{ service_name | default('pihole') }}.entrypoints={{ traefik_tls_entrypoint | default('websecure') }}
  32. - traefik.http.routers.{{ service_name | default('pihole') }}.tls=true
  33. - traefik.http.routers.{{ service_name | default('pihole') }}.tls.certresolver={{ traefik_tls_certresolver }}
  34. {% else %}
  35. - traefik.http.routers.{{ service_name | default('pihole') }}.entrypoints={{ traefik_entrypoint | default('web') }}
  36. {% endif %}
  37. - traefik.http.routers.{{ service_name | default('pihole') }}.service={{ service_name | default('pihole') }}
  38. - traefik.http.services.{{ service_name | default('pihole') }}.loadBalancer.server.port=80
  39. {% endif %}
  40. restart: {{ restart_policy | default('unless-stopped') }}
  41. volumes:
  42. config_dnsmasq:
  43. driver: local
  44. config_pihole:
  45. driver: local
  46. {% if network_enabled %}
  47. networks:
  48. {{ network_name | default('bridge') }}:
  49. {% if network_external %}
  50. external: true
  51. {% endif %}
  52. {% endif %}