Sources¶
dnsweaver reads hostnames from seven sources. All seven are peers: enable any combination with DNSWEAVER_SOURCES, and run as many at once as you need. Each one extracts hostnames differently, so dnsweaver works with the reverse proxy configuration you already have and with VMs and containers discovered straight from the Proxmox VE and Incus APIs.
Available Sources¶
-
Docker Labels
Parse hostnames from Traefik router labels on Docker containers.
-
Docker Swarm
Discover services in Docker Swarm mode with support for service labels and tasks.
-
Traefik Files
Watch Traefik dynamic configuration files for hostname changes.
-
Caddy Labels
Parse hostnames from caddy-docker-proxy style container labels.
-
nginx-proxy Labels
Parse
VIRTUAL_HOSTlabels used by jwilder/nginx-proxy. -
Native Labels
Use dnsweaver-specific labels for explicit DNS record configuration.
-
Kubernetes
Automatic hostname extraction from Ingress, IngressRoute, HTTPRoute, and Service resources.
-
Proxmox VE
Discover VMs and LXC containers on a Proxmox cluster and create A records from VM names.
-
Incus
Discover Incus system containers and VMs over a local socket or remote HTTPS and create A records from instance names.
Source Priority¶
When multiple sources provide the same hostname, dnsweaver uses the following priority:
dnsweavernative labels (explicit configuration)traefiklabels (reverse proxy configuration)caddylabels (caddy-docker-proxy configuration)nginx-proxylabels (VIRTUAL_HOST)traefikfiles (dynamic configuration)kubernetes(resource spec hostnames)proxmox(VM/LXC name + domain suffix)incus(instance name + domain suffix)
Priority applies only when two sources claim the same hostname. It is a tiebreaker, not a ranking of the sources themselves.
Capability matrix¶
The value in the first column is what you put in DNSWEAVER_SOURCES.
| Source | Reads | Runs over | Example |
|---|---|---|---|
traefik |
traefik.http.routers.*.rule labels, plus http.routers.*.rule in Traefik dynamic config files |
Docker, Swarm, Incus | Host(`app.example.com`) |
caddy |
caddy / caddy_<n> labels from caddy-docker-proxy |
Docker, Swarm, Incus | caddy=app.example.com |
nginx-proxy |
VIRTUAL_HOST labels from jwilder/nginx-proxy |
Docker, Swarm, Incus | VIRTUAL_HOST=app.example.com |
dnsweaver |
Native dnsweaver.* labels, for explicit record configuration |
Docker, Swarm, Incus | dnsweaver.hostname=app.example.com |
kubernetes |
Ingress, IngressRoute, HTTPRoute, and Service resource specs | Kubernetes | .spec.rules[].host |
proxmox |
PVE API: QEMU VM names via the guest agent, and LXC container names | Proxmox VE | webserver + home.example.com |
incus |
Incus API: system container and VM instance names | Incus | webserver + home.example.com |
The four label-reading sources also work on Incus, because the Incus adapter surfaces
incus-compose user.label.<key> config keys under their
stripped <key> form. No extra configuration needed.
Traefik file discovery is part of the traefik source, not a separate entry: set
DNSWEAVER_SOURCE_TRAEFIK_FILE_PATHS and it turns on.
Multiple hostnames
Containers and Kubernetes resources can expose multiple hostnames. All discovered hostnames are processed independently and matched against configured provider domains.