selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
docker-duckdns logo

Self-host docker-duckdns

8aabc87c-ls95

Docker container for DuckDNS dynamic DNS updates

ReleaseOpen SourceGPL-3.0
Updated10 hours ago
LanguageShell
Setup difficultyEasy
Stars
376
Docker
lscr.io/linuxserver/duckdns
Install with Docker

What is docker-duckdns?

linuxserver/duckdns is a Docker container from the LinuxServer.io team that keeps DuckDNS subdomains pointed at your current public IP address. It runs as a lightweight Alpine-based container with s6 overlay, updating records every 5 minutes with random jitter. The container supports multiple subdomains, optional IPv6 updates via Cloudflare's whoami service, configurable logging to a persistent volume, and can run with a read-only filesystem. It's configured entirely through environment variables including your DuckDNS token and subdomain list.

Should you self-host docker-duckdns?

docker-duckdns scores 60/100 on selfhost.directory (how scoring works) and ranks #6 of 31 in Networking. It has 376 GitHub stars.

It shipped 20 stable releases in the past year. The latest, 8aabc87c-ls95, came out on 26 October 2026. New versions land roughly every 7 days.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is GPL-3.0-licensed and written mostly in Shell.

Its closest alternative on selfhost.directory is headscale (82/100, 45 131 stars). It scores higher overall, so compare the two before you pick. See docker-duckdns vs headscale side by side.

Features

  • Docker secrets support
  • Dynamic DNS Updates
  • IPv4 and IPv6 SupportIPv6 and 'both' modes require host networking
  • Multiple Subdomains
  • Persistent logging
  • Read-only filesystem support
  • User/group mapping

docker-duckdns README

How to install docker-duckdns

Install docker-duckdns with Docker

Environment variables
PUID, PGID, TZ, SUBDOMAINS, TOKEN, UPDATE_IP, LOG_FILE

docker run -d --name=duckdns --net=host #optional -e PUID=1000 #optional -e PGID=1000 #optional -e TZ=Etc/UTC #optional -e SUBDOMAINS=subdomain1,subdomain2 -e TOKEN=token -e UPDATE_IP=ipv4 #optional -e LOG_FILE=false #optional -v /path/to/duckdns/config:/config #optional --restart unless-stopped lscr.io/linuxserver/duckdns:latest

Alternative installation method

How to configure docker-duckdns

  • LOG_FILEfalseSet to 'true' to log to file (requires /config volume mount)

    Set to 'true' to log to file (requires /config volume mount)

    values: true, false

  • PGID1000Group ID for file permissions

    Group ID for file permissions

  • PUID1000User ID for file permissions

    User ID for file permissions

  • SUBDOMAINSComma-separated list of DuckDNS subdomains to update (e.g., 'user' for user.duckdns.org)

    Comma-separated list of DuckDNS subdomains to update (e.g., 'user' for user.duckdns.org)

  • TOKENDuckDNS authentication token

    DuckDNS authentication token

  • TZEtc/UTCTimezone for the container

    Timezone for the container

    values: See Wikipedia list of tz database time zones

  • UMASK022Override default umask for services started in container

    Override default umask for services started in container

  • UPDATE_IPIP version to update: 'ipv4', 'ipv6', or 'both'. Uses Cloudflare whoami service when set.

    IP version to update: 'ipv4', 'ipv6', or 'both'. Uses Cloudflare whoami service when set.

    values: ipv4, ipv6, both

docker-duckdns releases & version history

More in DNS

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…