maxamill/dnsweaver

By maxamill

โ€ขUpdated 1 day ago

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

Image
Networking
Integration & delivery
1

10K+

maxamill/dnsweaver repository overview

dnsweaver

โ dnsweaver

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โ 


โ Why dnsweaver?

  • Proxmox VE auto-DNS โ€” A records for VMs and LXCs from the PVE API. Almost nothing else does this.
  • Self-hosted DNS, first-class โ€” Technitium, Pi-hole, AdGuard Home, dnsmasq, OPNsense, and pfSense.
  • Seven sources โ€” Traefik, Caddy, nginx-proxy, native labels, Kubernetes, Proxmox VE, and Incus in one binary. Run one or all at once.
  • Split-horizon โ€” Internal and external records from the same labels (e.g. Technitium internally, Cloudflare externally).
  • Single static Go binary โ€” ~15 MB, multi-arch (amd64/arm64), zero runtime dependencies.

โ Supported Sources

Enable any combination with DNSWEAVER_SOURCES.

SourceReadsRuns over
traefiktraefik.http.routers.*.rule labels, plus Traefik dynamic config filesDocker, Swarm, Incus
caddycaddy / caddy_<n> labels from caddy-docker-proxyDocker, Swarm, Incus
nginx-proxyVIRTUAL_HOST labels from jwilder/nginx-proxyDocker, Swarm, Incus
dnsweaverNative dnsweaver.* labels for explicit record configurationDocker, Swarm, Incus
kubernetesIngress, IngressRoute, HTTPRoute, and Service resourcesKubernetes
proxmoxPVE API: QEMU VMs via guest agent, and LXC containersProxmox VE
incusIncus API: system containers and VMsIncus

โ Supported Providers

ProviderRecord Types
TechnitiumA, AAAA, CNAME, SRV, TXT
CloudflareA, AAAA, CNAME, SRV, TXT (optional proxy)
OVHcloudA, AAAA, CNAME, SRV, TXT
RFC 2136 (BIND, Windows DNS, Knot)A, AAAA, CNAME, SRV, TXT
PowerDNSA, AAAA, CNAME, SRV, TXT
Pi-holeA, CNAME
AdGuard HomeA, AAAA, CNAME
OPNsenseA, AAAA
pfSenseA, AAAA
dnsmasqA, CNAME
WebhookAny (custom integrations)

โ Tags

  • latest โ€” latest stable release
  • vX.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.

โ Quick Start

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.

โ License

MITโ  ยท Maintained by Maxfield Allisonโ 

Tag summary

Content type

Image

Digest

sha256:236da96e8โ€ฆ

Size

25.8 MB

Last updated

1 day ago

docker pull maxamill/dnsweaver