compose.yaml.j2 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. services:
  2. {{ service_name }}:
  3. container_name: {{ container_name }}
  4. image: docker.io/pihole/pihole:2025.08.0
  5. env_file:
  6. - .env.pihole
  7. {% if network_mode == 'host' %}
  8. network_mode: host
  9. {% elif traefik_enabled or network_mode == 'macvlan' %}
  10. networks:
  11. {% if traefik_enabled %}
  12. {{ traefik_network }}:
  13. {% endif %}
  14. {% if network_mode == 'macvlan' %}
  15. {{ network_name }}:
  16. ipv4_address: {{ network_macvlan_ipv4_address }}
  17. {% elif network_mode == 'bridge' %}
  18. {{ network_name }}:
  19. {% endif %}
  20. {% endif %}
  21. {% if network_mode not in ['host', 'macvlan'] and (not traefik_enabled or dns_enabled or dhcp_enabled) %}
  22. ports:
  23. {% if not traefik_enabled %}
  24. - "{{ ports_https }}:443/tcp"
  25. {% endif %}
  26. {% if dns_enabled %}
  27. - "53:53/tcp"
  28. - "53:53/udp"
  29. {% endif %}
  30. {% if dhcp_enabled %}
  31. - "67:67/udp"
  32. {% endif %}
  33. {% endif %}
  34. volumes:
  35. - config_dnsmasq:/etc/dnsmasq.d
  36. - config_pihole:/etc/pihole
  37. {% if dhcp_enabled %}
  38. cap_add:
  39. - NET_ADMIN
  40. {% endif %}
  41. {% if traefik_enabled %}
  42. labels:
  43. - traefik.enable=true
  44. - traefik.http.services.{{ service_name }}-web.loadBalancer.server.port=80
  45. - traefik.http.routers.{{ service_name }}-http.service={{ service_name }}-web
  46. - traefik.http.routers.{{ service_name }}-http.rule=Host(`{{ traefik_host }}`)
  47. - traefik.http.routers.{{ service_name }}-http.entrypoints={{ traefik_entrypoint }}
  48. {% if traefik_tls_enabled %}
  49. - traefik.http.routers.{{ service_name }}-https.service={{ service_name }}-web
  50. - traefik.http.routers.{{ service_name }}-https.rule=Host(`{{ traefik_host }}`)
  51. - traefik.http.routers.{{ service_name }}-https.entrypoints={{ traefik_tls_entrypoint }}
  52. - traefik.http.routers.{{ service_name }}-https.tls=true
  53. - traefik.http.routers.{{ service_name }}-https.tls.certresolver={{ traefik_tls_certresolver }}
  54. {% endif %}
  55. {% endif %}
  56. restart: {{ restart_policy }}
  57. volumes:
  58. config_dnsmasq:
  59. driver: local
  60. config_pihole:
  61. driver: local
  62. {% if network_mode != 'host' and (network_mode in ['bridge', 'macvlan'] or traefik_enabled) %}
  63. networks:
  64. {% if network_mode == 'macvlan' %}
  65. {{ network_name }}:
  66. driver: macvlan
  67. driver_opts:
  68. parent: {{ network_macvlan_parent_interface }}
  69. ipam:
  70. config:
  71. - subnet: {{ network_macvlan_subnet }}
  72. gateway: {{ network_macvlan_gateway }}
  73. {% elif network_mode == 'bridge' and network_external %}
  74. {{ network_name }}:
  75. external: true
  76. {% elif network_mode == 'bridge' and not network_external %}
  77. {{ network_name }}:
  78. driver: bridge
  79. {% endif %}
  80. {% if traefik_enabled %}
  81. {{ traefik_network }}:
  82. external: true
  83. {% endif %}
  84. {% endif %}