2026-01-03 01:52:59 +00:00
|
|
|
|
version: "3.9"
|
|
|
|
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
|
powerdns:
|
|
|
|
|
|
image: ${PDNS_IMAGE:-powerdns/pdns:latest}
|
|
|
|
|
|
container_name: ${PDNS_CONTAINER_NAME:-powerdns}
|
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
|
|
environment:
|
|
|
|
|
|
# API & Webserver
|
|
|
|
|
|
PDNS_API_KEY: ${PDNS_API_KEY:-changeme}
|
|
|
|
|
|
PDNS_WEBSERVER: yes
|
|
|
|
|
|
PDNS_WEBSERVER_ADDRESS: 0.0.0.0
|
|
|
|
|
|
PDNS_WEBSERVER_PORT: 8081
|
|
|
|
|
|
|
|
|
|
|
|
# Master/Slave
|
|
|
|
|
|
PDNS_MASTER: ${PDNS_MASTER:-yes}
|
|
|
|
|
|
PDNS_SLAVE: ${PDNS_SLAVE:-yes}
|
|
|
|
|
|
PDNS_ALLOW_AXFR_IPS: ${PDNS_ALLOW_AXFR_IPS:-127.0.0.1}
|
|
|
|
|
|
|
|
|
|
|
|
########################################
|
2026-01-03 02:01:09 +00:00
|
|
|
|
# DATABASE ENGINE (gsqlite3 ODER gpgsql)
|
2026-01-03 01:52:59 +00:00
|
|
|
|
########################################
|
|
|
|
|
|
PDNS_LAUNCH: ${PDNS_LAUNCH:-gsqlite3}
|
|
|
|
|
|
|
2026-01-03 02:01:09 +00:00
|
|
|
|
# SQLite
|
2026-01-03 01:52:59 +00:00
|
|
|
|
PDNS_GSQLITE3_DATABASE: ${PDNS_GSQLITE3_DATABASE:-/data/pdns.sqlite3}
|
|
|
|
|
|
|
2026-01-03 02:01:09 +00:00
|
|
|
|
# PostgreSQL
|
2026-01-03 01:52:59 +00:00
|
|
|
|
PDNS_GPGSQL_HOST: ${PDNS_GPGSQL_HOST:-}
|
|
|
|
|
|
PDNS_GPGSQL_PORT: ${PDNS_GPGSQL_PORT:-5432}
|
|
|
|
|
|
PDNS_GPGSQL_USER: ${PDNS_GPGSQL_USER:-}
|
|
|
|
|
|
PDNS_GPGSQL_PASSWORD: ${PDNS_GPGSQL_PASSWORD:-}
|
|
|
|
|
|
PDNS_GPGSQL_DBNAME: ${PDNS_GPGSQL_DBNAME:-}
|
|
|
|
|
|
|
2026-01-03 02:01:09 +00:00
|
|
|
|
# IPv6 Binding in PowerDNS (optional)
|
|
|
|
|
|
# leer = PowerDNS nutzt Default, z.B. nur IPv4
|
2026-01-03 01:52:59 +00:00
|
|
|
|
PDNS_LOCAL_IPV6: ${PDNS_LOCAL_IPV6:-}
|
|
|
|
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
- ${PDNS_DATA_PATH:-pdns-data}:/data
|
|
|
|
|
|
|
|
|
|
|
|
networks:
|
2026-01-03 02:01:09 +00:00
|
|
|
|
- proxy # nur für Traefik / API
|
2026-01-03 01:52:59 +00:00
|
|
|
|
|
|
|
|
|
|
ports:
|
2026-01-03 01:55:54 +00:00
|
|
|
|
########################################
|
2026-01-03 02:01:09 +00:00
|
|
|
|
# IPv4 DNS – Public IP + Port parametrisiert
|
2026-01-03 01:55:54 +00:00
|
|
|
|
########################################
|
|
|
|
|
|
- "${PDNS_PUBLIC_IPV4:-0.0.0.0}:${PDNS_PUBLIC_PORT:-53}:53/tcp"
|
|
|
|
|
|
- "${PDNS_PUBLIC_IPV4:-0.0.0.0}:${PDNS_PUBLIC_PORT:-53}:53/udp"
|
2026-01-03 01:52:59 +00:00
|
|
|
|
|
2026-01-03 01:55:54 +00:00
|
|
|
|
########################################
|
2026-01-03 02:01:09 +00:00
|
|
|
|
# IPv6 DNS – Public IP + Port parametrisiert
|
|
|
|
|
|
# Wenn du KEIN IPv6 willst: diese zwei Zeilen auskommentieren
|
2026-01-03 01:55:54 +00:00
|
|
|
|
########################################
|
2026-01-03 02:01:09 +00:00
|
|
|
|
- "[${PDNS_PUBLIC_IPV6:-::}]:${PDNS_PUBLIC_PORT6:-53}:53/tcp"
|
|
|
|
|
|
- "[${PDNS_PUBLIC_IPV6:-::}]:${PDNS_PUBLIC_PORT6:-53}:53/udp"
|
2026-01-03 01:52:59 +00:00
|
|
|
|
|
|
|
|
|
|
labels:
|
|
|
|
|
|
- "traefik.enable=true"
|
|
|
|
|
|
- "traefik.http.routers.powerdns.rule=Host(`${PDNS_TRAEFIK_HOST:-dns.example.com}`)"
|
|
|
|
|
|
- "traefik.http.routers.powerdns.entrypoints=${PDNS_TRAEFIK_ENTRYPOINT:-websecure}"
|
|
|
|
|
|
- "traefik.http.routers.powerdns.tls=true"
|
|
|
|
|
|
- "traefik.http.routers.powerdns.tls.certresolver=${PDNS_TRAEFIK_CERTRESOLVER:-letsencrypt}"
|
|
|
|
|
|
- "traefik.http.services.powerdns.loadbalancer.server.port=8081"
|
|
|
|
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
pdns-data:
|
|
|
|
|
|
|
|
|
|
|
|
networks:
|
|
|
|
|
|
proxy:
|
|
|
|
|
|
external: true
|
2026-01-03 02:01:09 +00:00
|
|
|
|
enable_ipv6: false # Traefik-Netz bleibt IPv4; DNS läuft direkt auf Host-IP
|