| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- services:
- {{ service_name | default('pihole') }}:
- container_name: {{ container_name | default('pihole') }}
- image: docker.io/pihole/pihole:2025.08.0
- {% if network_enabled and network_mode == 'host' %}
- network_mode: host
- {% elif traefik_enabled or (network_enabled and network_mode == 'macvlan') %}
- networks:
- {% if traefik_enabled %}
- {{ traefik_network | default('traefik') }}:
- {% endif %}
- {% if network_enabled and network_mode == 'macvlan' %}
- {{ network_name | default('pihole_net') }}:
- ipv4_address: {{ network_macvlan_ipv4_address }}
- {% elif network_enabled and network_mode == 'bridge' %}
- {{ network_name | default('bridge') }}:
- {% endif %}
- {% endif %}
- {% if ports_enabled and not (network_enabled and network_mode in ['host', 'macvlan']) and (not traefik_enabled or dns_enabled or dhcp_enabled) %}
- ports:
- {% if not traefik_enabled %}
- - "{{ ports_http }}:80/tcp"
- - "{{ ports_https }}:443/tcp"
- {% endif %}
- {% if dns_enabled %}
- - "53:53/tcp"
- - "53:53/udp"
- {% endif %}
- {% if dhcp_enabled %}
- - "67:67/udp"
- {% endif %}
- {% endif %}
- environment:
- - TZ={{ container_timezone | default('UTC') }}
- {% if pihole_webpassword %} - FTLCONF_webserver_api_password={{ pihole_webpassword }}
- {% endif %} - FTLCONF_dns_upstreams={{ pihole_dns_upstreams | default('1.1.1.1;1.0.0.1') }}
- volumes:
- - config_dnsmasq:/etc/dnsmasq.d
- - config_pihole:/etc/pihole
- {% if traefik_enabled %}
- labels:
- - traefik.enable=true
- - traefik.http.services.{{ service_name | default('pihole') }}-web.loadBalancer.server.port=80
- - traefik.http.routers.{{ service_name | default('pihole') }}-http.service={{ service_name | default('pihole') }}-web
- - traefik.http.routers.{{ service_name | default('pihole') }}-http.rule=Host(`{{ traefik_host }}`)
- - traefik.http.routers.{{ service_name | default('pihole') }}-http.entrypoints={{ traefik_entrypoint | default('web') }}
- {% if traefik_tls_enabled %}
- - traefik.http.routers.{{ service_name | default('pihole') }}-https.service={{ service_name | default('pihole') }}-web
- - traefik.http.routers.{{ service_name | default('pihole') }}-https.rule=Host(`{{ traefik_host }}`)
- - traefik.http.routers.{{ service_name | default('pihole') }}-https.entrypoints={{ traefik_tls_entrypoint | default('websecure') }}
- - traefik.http.routers.{{ service_name | default('pihole') }}-https.tls=true
- - traefik.http.routers.{{ service_name | default('pihole') }}-https.tls.certresolver={{ traefik_tls_certresolver }}
- {% endif %}
- {% endif %}
- restart: {{ restart_policy | default('unless-stopped') }}
- volumes:
- config_dnsmasq:
- driver: local
- config_pihole:
- driver: local
- {% if network_enabled or traefik_enabled %}
- networks:
- {% if network_enabled and network_mode == 'macvlan' %}
- {{ network_name | default('pihole_net') }}:
- driver: macvlan
- driver_opts:
- parent: {{ network_macvlan_parent_interface }}
- ipam:
- config:
- - subnet: {{ network_macvlan_subnet }}
- gateway: {{ network_macvlan_gateway }}
- {% elif network_enabled and network_mode == 'bridge' and network_external %}
- {{ network_name | default('bridge') }}:
- external: true
- {% elif network_enabled and network_mode == 'bridge' and not network_external %}
- {{ network_name | default('bridge') }}:
- driver: bridge
- {% endif %}
- {% if traefik_enabled %}
- {{ traefik_network | default('traefik') }}:
- external: true
- {% endif %}
- {% endif %}
|