--- services: << service_name >>: image: docker.io/technitium/dns-server:15.1.0 restart: << restart_policy >> <%- if container_name %> container_name: << container_name >> <%- endif %> <%- if container_hostname %> hostname: << container_hostname >> <%- endif %> environment: - DNS_SERVER_DOMAIN=<< dns_server_domain >> - DNS_SERVER_ADMIN_PASSWORD=${DNS_SERVER_ADMIN_PASSWORD} - DNS_SERVER_LOG_FOLDER_PATH=/var/log/technitium/dns - DNS_SERVER_LOG_USING_LOCAL_TIME=<< dns_server_log_using_local_time | lower >> - DNS_SERVER_RECURSION=<< dns_server_recursion >> <%- if dns_server_forwarders %> - DNS_SERVER_FORWARDERS=<< dns_server_forwarders >> - DNS_SERVER_FORWARDER_PROTOCOL=<< dns_server_forwarder_protocol >> <%- endif %> <%- if dns_server_enable_blocking %> - DNS_SERVER_ENABLE_BLOCKING=true <%- endif %> <%- if dns_server_optional_protocol_dns_over_http %> - DNS_SERVER_OPTIONAL_PROTOCOL_DNS_OVER_HTTP=true <%- endif %> <%- if network_mode == 'host' %> network_mode: host <%- elif network_mode == 'bridge' or network_mode == 'macvlan' or traefik_enabled %> networks: <%- if traefik_enabled %> << traefik_network >>: <%- endif %> <%- if network_mode == 'macvlan' %> << network_name >>: ipv4_address: << network_macvlan_ipv4_address >> <%- elif network_mode == 'bridge' %> << network_name >>: <%- endif %> <%- endif %> <%- if not network_mode or network_mode == 'bridge' or traefik_enabled %> ports: <%- if not traefik_enabled %> - "<< ports_web_http >>:5380/tcp" - "<< ports_dns_over_https >>:443/tcp" <%- if dns_server_optional_protocol_dns_over_http %> - "<< ports_dns_over_http >>:80/tcp" <%- endif %> <%- endif %> - "<< ports_dns >>:53/tcp" - "<< ports_dns >>:53/udp" <%- endif %> volumes: <%- if volume_mode == 'mount' %> - << volume_mount_path >>/config:/etc/dns:rw - << volume_mount_path >>/logs:/var/log/technitium/dns:rw <%- else %> - << service_name >>_config:/etc/dns - << service_name >>_logs:/var/log/technitium/dns <%- endif %> <%- if network_mode != 'host' %> sysctls: - net.ipv4.ip_local_port_range=1024 65535 <%- endif %> <%- if traefik_enabled %> labels: - traefik.enable=true - traefik.docker.network=<< traefik_network >> - traefik.http.services.<< service_name >>-web.loadBalancer.server.port=5380 - traefik.http.routers.<< service_name >>-http.service=<< service_name >>-web - traefik.http.routers.<< service_name >>-http.rule=Host(`<< traefik_host >>.<< traefik_domain >>`) - traefik.http.routers.<< service_name >>-http.entrypoints=<< traefik_entrypoint >> <%- if traefik_tls_enabled %> - traefik.http.routers.<< service_name >>-https.service=<< service_name >>-web - traefik.http.routers.<< service_name >>-https.rule=Host(`<< traefik_host >>.<< traefik_domain >>`) - traefik.http.routers.<< service_name >>-https.entrypoints=<< traefik_tls_entrypoint >> - traefik.http.routers.<< service_name >>-https.tls=true - traefik.http.routers.<< service_name >>-https.tls.certresolver=<< traefik_tls_certresolver >> <%- if dns_server_optional_protocol_dns_over_http %> - traefik.http.services.<< service_name >>-doh.loadBalancer.server.port=80 - traefik.http.routers.<< service_name >>-doh.service=<< service_name >>-doh - traefik.http.routers.<< service_name >>-doh.rule=Host(`<< traefik_host >>.<< traefik_domain >>`) && Path(`/dns-query`) - traefik.http.routers.<< service_name >>-doh.entrypoints=<< traefik_tls_entrypoint >> - traefik.http.routers.<< service_name >>-doh.tls=true - traefik.http.routers.<< service_name >>-doh.tls.certresolver=<< traefik_tls_certresolver >> - traefik.http.routers.<< service_name >>-doh.priority=100 <%- endif %> <%- endif %> <%- endif %> <%- if network_mode == 'bridge' or network_mode == 'macvlan' or traefik_enabled %> networks: <%- if network_mode == 'bridge' or network_mode == 'macvlan' %> << network_name >>: <%- if network_external %> external: true <%- else %> <%- if network_mode == 'macvlan' %> driver: macvlan driver_opts: parent: << network_macvlan_parent_interface >> ipam: config: - subnet: << network_macvlan_subnet >> gateway: << network_macvlan_gateway >> name: << network_name >> <%- else %> driver: bridge <%- endif %> <%- endif %> <%- endif %> <%- if traefik_enabled %> << traefik_network >>: external: true <%- endif %> <%- endif %> <%- if volume_mode == 'local' %> volumes: << service_name >>_config: driver: local << service_name >>_logs: driver: local <%- elif volume_mode == 'nfs' %> volumes: << service_name >>_config: driver: local driver_opts: type: nfs o: addr=<< volume_nfs_server >>,nfsvers=4,<< volume_nfs_options >> device: ":<< volume_nfs_path >>/config" << service_name >>_logs: driver: local driver_opts: type: nfs o: addr=<< volume_nfs_server >>,nfsvers=4,<< volume_nfs_options >> device: ":<< volume_nfs_path >>/logs" <%- endif %>