compose.yaml.j2 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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.services.{{ service_name | default('pihole') }}.loadBalancer.server.port=80
  30. - traefik.http.routers.{{ service_name | default('pihole') }}-http.service={{ service_name | default('pihole') }}
  31. - traefik.http.routers.{{ service_name | default('pihole') }}-http.rule=Host(`{{ traefik_host }}`)
  32. - traefik.http.routers.{{ service_name | default('pihole') }}-http.entrypoints={{ traefik_entrypoint | default('web') }}
  33. {% if traefik_tls_enabled %}
  34. - traefik.http.routers.{{ service_name | default('pihole') }}-https.service={{ service_name | default('pihole') }}
  35. - traefik.http.routers.{{ service_name | default('pihole') }}-https.rule=Host(`{{ traefik_host }}`)
  36. - traefik.http.routers.{{ service_name | default('pihole') }}-https.entrypoints={{ traefik_tls_entrypoint | default('websecure') }}
  37. - traefik.http.routers.{{ service_name | default('pihole') }}-https.tls=true
  38. - traefik.http.routers.{{ service_name | default('pihole') }}-https.tls.certresolver={{ traefik_tls_certresolver }}
  39. {% endif %}
  40. {% endif %}
  41. restart: {{ restart_policy | default('unless-stopped') }}
  42. volumes:
  43. config_dnsmasq:
  44. driver: local
  45. config_pihole:
  46. driver: local
  47. {% if network_enabled %}
  48. networks:
  49. {{ network_name | default('bridge') }}:
  50. {% if network_external %}
  51. external: true
  52. {% endif %}
  53. {% endif %}