Automatic DNS records for containers, VMs & clusters. 7 sources, 11 DNS providers.
10K+

Automatic DNS records for containers, VMs & clusters.
dnsweaver reads hostnames from seven sources and writes records to eleven DNS providers. A container starts with a Traefik label or a Proxmox VM boots, and the record appears; when they go away, so does it. Think of it as external-dns for the homelab.
๐ Documentationโ ยท ๐ GitHubโ ยท ๐ Releasesโ
Enable any combination with DNSWEAVER_SOURCES.
| Source | Reads | Runs over |
|---|---|---|
traefik | traefik.http.routers.*.rule labels, plus Traefik dynamic config files | Docker, Swarm, Incus |
caddy | caddy / caddy_<n> labels from caddy-docker-proxy | Docker, Swarm, Incus |
nginx-proxy | VIRTUAL_HOST labels from jwilder/nginx-proxy | Docker, Swarm, Incus |
dnsweaver | Native dnsweaver.* labels for explicit record configuration | Docker, Swarm, Incus |
kubernetes | Ingress, IngressRoute, HTTPRoute, and Service resources | Kubernetes |
proxmox | PVE API: QEMU VMs via guest agent, and LXC containers | Proxmox VE |
incus | Incus API: system containers and VMs | Incus |
| Provider | Record Types |
|---|---|
| Technitium | A, AAAA, CNAME, SRV, TXT |
| Cloudflare | A, AAAA, CNAME, SRV, TXT (optional proxy) |
| OVHcloud | A, AAAA, CNAME, SRV, TXT |
| RFC 2136 (BIND, Windows DNS, Knot) | A, AAAA, CNAME, SRV, TXT |
| PowerDNS | A, AAAA, CNAME, SRV, TXT |
| Pi-hole | A, CNAME |
| AdGuard Home | A, AAAA, CNAME |
| OPNsense | A, AAAA |
| pfSense | A, AAAA |
| dnsmasq | A, CNAME |
| Webhook | Any (custom integrations) |
latest โ latest stable releasevX.Y.Z โ specific release (recommended for production)Multi-arch images are published for linux/amd64 and linux/arm64.
Also available on GitHub Container Registry: ghcr.io/maxfield-allison/dnsweaver.
services:
dnsweaver:
image: maxamill/dnsweaver:latest
restart: unless-stopped
environment:
- DNSWEAVER_INSTANCES=internal-dns
- DNSWEAVER_INTERNAL_DNS_TYPE=technitium
- DNSWEAVER_INTERNAL_DNS_URL=http://dns.internal:5380
- DNSWEAVER_INTERNAL_DNS_TOKEN_FILE=/run/secrets/technitium_token
- DNSWEAVER_INTERNAL_DNS_ZONE=home.example.com
- DNSWEAVER_INTERNAL_DNS_RECORD_TYPE=A
- DNSWEAVER_INTERNAL_DNS_TARGET=192.0.2.100
- DNSWEAVER_INTERNAL_DNS_DOMAINS=*.home.example.com
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
secrets:
- technitium_token
secrets:
technitium_token:
external: true
A container carrying this label gets an A record created automatically:
labels:
- "traefik.http.routers.myapp.rule=Host(`myapp.home.example.com`)"
When the container stops, the record is removed.
See the Getting Started guideโ for the full walkthrough, Kubernetes and Proxmox setup, and provider-specific configuration.
MITโ ยท Maintained by Maxfield Allisonโ
Content type
Image
Digest
sha256:236da96e8โฆ
Size
25.8 MB
Last updated
1 day ago
docker pull maxamill/dnsweaver