43 lines
1.9 KiB
YAML
43 lines
1.9 KiB
YAML
services:
|
|
dns:
|
|
image: technitium/dns-server:latest
|
|
container_name: dns-${DNS_NODE_ID} # Becomes dns-1 or dns-2
|
|
restart: unless-stopped
|
|
ports:
|
|
- "53:53/udp"
|
|
- "53:53/tcp"
|
|
- "5381:5380/tcp"
|
|
environment:
|
|
- TZ=America/Edmonton
|
|
- DNS_SERVER_DOMAIN=dns${DNS_NODE_ID}.${TRAEFIK_DNS_SUFFIX} # dns1... or dns2...
|
|
- DNS_SERVER_ADMIN_PASSWORD=${DNS_ADMIN_PASSWORD}
|
|
volumes:
|
|
# Updated path to match your new 'infrastructure' folder structure
|
|
- /docker/core/dns/config:/etc/dns
|
|
networks:
|
|
- dns_external
|
|
- dns_internal
|
|
labels:
|
|
- "traefik.enable=${DNS_TRAEFIK_ENABLED}"
|
|
- "traefik.docker.network=dns_external"
|
|
# --- SHARED HA ROUTER ---
|
|
# The router NAME must be unique, so we add the ID here too
|
|
- "traefik.http.routers.dns-shared-${DNS_NODE_ID}.rule=Host(`dns.${TRAEFIK_DNS_SUFFIX}`)"
|
|
- "traefik.http.routers.dns-shared-${DNS_NODE_ID}.entrypoints=${TRAEFIK_ENTRY_POINTS}"
|
|
- "traefik.http.routers.dns-shared-${DNS_NODE_ID}.tls.certresolver=${TRAEFIK_RESOLVER}"
|
|
# Both point to the SAME service name to enable load balancing
|
|
- "traefik.http.routers.dns-shared-${DNS_NODE_ID}.service=dns-common-service"
|
|
# --- NODE-SPECIFIC ADMIN ROUTER ---
|
|
# Unique router name and unique Host rule
|
|
- "traefik.http.routers.dns-admin-${DNS_NODE_ID}.rule=Host(`dns${DNS_NODE_ID}.${TRAEFIK_DNS_SUFFIX}`)"
|
|
- "traefik.http.routers.dns-admin-${DNS_NODE_ID}.entrypoints=${TRAEFIK_ENTRY_POINTS}"
|
|
- "traefik.http.routers.dns-admin-${DNS_NODE_ID}.tls.certresolver=${TRAEFIK_RESOLVER}"
|
|
- "traefik.http.routers.dns-admin-${DNS_NODE_ID}.service=dns-common-service"
|
|
# --- THE SHARED SERVICE ---
|
|
# This name MUST be identical on Node 1 and Node 2
|
|
- "traefik.http.services.dns-common-service.loadbalancer.server.port=${DNS_TRAEFIK_PORT}"
|
|
networks:
|
|
dns_external:
|
|
driver: bridge
|
|
dns_internal:
|
|
external: true
|