services: # --- Node 1 (Primary) --- dns-01: image: technitium/dns-server:latest container_name: dns-01 hostname: dns-01 restart: unless-stopped ports: - "53:53/udp" # Live DNS - "53:53/tcp" - "5381:5380/tcp" # Web UI -> 5381 environment: - TZ=America/Edmonton - DNS_SERVER_DOMAIN=dns1.mapletree.email - DNS_SERVER_ADMIN_PASSWORD=${DNS_ADMIN_PASSWORD} volumes: #- ${CONFIG_PATH}/primary:/etc/dns/config - ./primary:/etc/dns networks: dns_internal: ipv4_address: 172.35.0.101 dns_external: {} labels: - "traefik.enable=true" - "traefik.docker.network=dns_external" - "traefik.http.routers.dns01.rule=Host(`dns1.mapletree.email`)" - "traefik.http.routers.dns01.entrypoints=web,websecure" - "traefik.http.routers.dns01.tls.certresolver=myresolver" - "traefik.http.services.dns01.loadbalancer.server.port=5380" # --- Node 2 (Secondary) --- dns-02: image: technitium/dns-server:latest container_name: dns-02 hostname: dns-02 restart: unless-stopped ports: - "5301:53/udp" # Testing DNS - "5301:53/tcp" - "5382:5380/tcp" # Web UI -> 5382 environment: - TZ=America/Edmonton - DNS_SERVER_DOMAIN=dns2.mapletree.email - DNS_SERVER_ADMIN_PASSWORD=${DNS_ADMIN_PASSWORD} volumes: #- ${CONFIG_PATH}/secondary:/etc/dns/config - ./secondary:/etc/dns networks: dns_internal: ipv4_address: 172.35.0.102 dns_external: {} labels: - "traefik.enable=true" - "traefik.docker.network=dns_external" - "traefik.http.routers.dns02.rule=Host(`dns2.mapletree.email`)" # ... (Standard Traefik labels) ... - "traefik.http.services.dns02.loadbalancer.server.port=5380" # --- Metrics Sidecar --- dns-exporter: image: ghcr.io/guycalledseven/technitium-dns-prometheus-exporter:latest container_name: dns-exporter restart: unless-stopped environment: # Note the simplified variable names - TECHNITIUM_BASE_URL=http://172.35.0.101:5380 - TECHNITIUM_TOKEN=${DNS_API_TOKEN} ports: - "8081:9105" # Maps container 8080 to host 8081 networks: - dns_internal networks: dns_internal: driver: bridge ipam: config: - subnet: 172.35.0.0/24 dns_external: external: true