{"id":30162905,"url":"https://github.com/tarow/dockdns","last_synced_at":"2026-04-02T17:53:37.156Z","repository":{"id":211694305,"uuid":"727110807","full_name":"Tarow/dockdns","owner":"Tarow","description":"Cloudflare DNS Client based on Docker Labels","archived":false,"fork":false,"pushed_at":"2025-08-01T00:38:04.000Z","size":334,"stargazers_count":7,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-10T04:55:02.829Z","etag":null,"topics":["cloudflare","ddns","dns","docker","go","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tarow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-12-04T07:54:27.000Z","updated_at":"2025-08-09T10:29:30.000Z","dependencies_parsed_at":"2024-06-23T13:27:48.715Z","dependency_job_id":"500b9f5f-f56b-45f3-b5f4-dbd2170afb35","html_url":"https://github.com/Tarow/dockdns","commit_stats":null,"previous_names":["tarow/dockdns"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/Tarow/dockdns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tarow%2Fdockdns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tarow%2Fdockdns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tarow%2Fdockdns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tarow%2Fdockdns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tarow","download_url":"https://codeload.github.com/Tarow/dockdns/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tarow%2Fdockdns/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269923392,"owners_count":24497106,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-11T02:00:10.019Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare","ddns","dns","docker","go","golang"],"created_at":"2025-08-11T17:13:47.643Z","updated_at":"2026-04-02T17:53:37.145Z","avatar_url":"https://github.com/Tarow.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Build](https://github.com/tarow/dockdns/actions/workflows/ci.yaml/badge.svg)\n[![go report](https://goreportcard.com/badge/github.com/Tarow/dockdns)](https://goreportcard.com/report/github.com/Tarow/dockdns)\n[![Renovate](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com)\n\n# DockDNS - (Dynamic) DNS Client based on Docker Labels\n\nDockDNS is a DNS updater, which supports configuring DNS records through Docker labels.\nCurrently DockDNS only supports Cloudflare as a DNS provider.\n\n## Features\n\n- Dynamic DNS updates\n- Static DNS entries (e.g. with a static IP address)\n- Static DNS record configuration based on a config file\n- Dynamic DNS record configuration based on Docker labels\n- IPv4 \u0026 IPv6 support\n- CNAME support\n- Supports multiple zones\n- Automatically trigger DNS updates when labeled containers start \u0026 stop\n\n## Configuration\n\nThe app configuration as well as the static domain entries are read from a configuration file (see [example configuration](config.example.yaml)).\n\n```yaml\ninterval: 600 # Optional, the update interval in seconds. Defaults to 600. Negative interval will result in one-shot invocations.\ndebounceTime: 10 # Optional, delay the DNS update run until no new trigger event has been received for \u003c\u003cdebounceTime\u003e\u003e seconds. This is used to avoid multiple DNS update runs when multiple containers are started/stopped in succession, e.g. by Docker Compose. Defaults to 10.\nmaxDebounceTime: 600 # Optional, if debouncing exceeds \u003c\u003cmaxDebounceTime\u003e\u003e seconds, do not delay the DNS update beyond that. This avoids delaying the DNS update forever, e.g. in case of crash-looping containers that generate trigger events indefinitely. Defaults to 600.\n\nwebUI: false # Optional, enables a WebUI (port 8080) that lists the scanned domains and current settings. Defaults to false\n\nlog:\n  level: info # Optional, Log level, one of 'debug', 'info', 'warn' or 'error'. Defaults to 'info'\n  format: simple # Optional, output of the log format, 'simple' or 'json'. Defaults to 'simple'\n\nzones: # Zone configuration (multiple zones can be provided)\n  - name: somedomain.com # Root name of the zone\n    provider: cloudflare # Name of the provider. Currently only Cloudflare is supported\n    apiToken: ... # API Token, needs permission 'Zone.Zone' (read) and Zone.DNS (edit). Can also be passed as environment variable: SOMEDOMAIN_COM_API_TOKEN\n    zoneID: ... # Optional: If not set, will be fetched dynamically. ZoneID of this zone. Can also be passed as environment variable: SOMEDOMAIN_COM_ZONE_ID\n\ndns:\n  a: true # Update IPv4 addresses\n  aaaa: false # Update IPv6 addresses\n  defaultTTL: 300 # Optional, default TTL for all records. Defaults to 300\n  purgeUnknown: true # Optional, delete unknown records. Defaults to false.\n\n# Static domain configuration (optional)\ndomains:\n  - name: \"*.somedomain.com\" # IPs for A and AAAA records will be determined dynamically\n    comment: \"Some comment\" # Record comment\n\n  - name: \"somedomain.com\"\n    a: 10.0.0.2 # Static IPv4 address\n    aaaa: ::1 # Static IPv6 address\n\n  - name: \"alt.somedomain.com\" # Name of the CNAME record\n    cname: \"main.somedomain.com\" # Target of the CNAME record\n```\n\n## Dynamic Domains\n\nDomains can also be configured using Docker labels.\nSupported labels:\n| Label | Example |\n|-----------------|-----------------------------|\n| dockdns.name | dockdns.name=somedomain.com |\n| dockdns.a | dockdns.a=127.0.0.1 |\n| dockdns.aaaa | dockdns.aaaa=::1 |\n| dockdns.cname | dockdns.cname=target.otherdomain.com |\n| dockdns.ttl | dockdns.ttl=600 |\n| dockdns.proxied | dockdns.proxied=false |\n| dockdns.comment | dockdns.comment=Some comment |\n\n---\n\nThe `dockdns.name` label can also contain a comma separated list of names, e.g.\n\n```ini\ndockdns.name=\"somedomain.com,www.somedomain.com\"\n```\n\nIf no explicit IP address is set, the public IP will be fetched and set automatically (DynDNS).\nIf a `CNAME` is set, `A` and `AAAA` settings are ignored.\n\n## Installation\n\n### Go install\n\n```\ngo install github.com/Tarow/dockdns@latest\n```\n\nBy default, DockDNS looks for a `config.yaml` in the current folder. The location of the configuration file can be overwritten using the `-config` flag:\n\n```\ndockdns -config /path/to/config.yaml\n```\n\n### Docker\n\n```bash\ndocker run -v ./config.yaml:/app/config.yaml -v /var/run/docker.sock:/var/run/docker.sock:ro ghcr.io/tarow/dockdns:latest\n```\n\n### Docker Compose\n\n```yaml\nservices:\n  dockdns:\n    image: ghcr.io/tarow/dockdns:latest\n    restart: unless-stopped\n    volumes:\n      - ./config.yaml:/app/config.yaml\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n```\n\n### Nix\n\n```bash\nnix run github:tarow/dockdns\n```\n\n---\n\nNote: To avoid direct socket access, you can also set environment variable `DOCKER_HOST`.\nFor example, if you use [docker-socket-proxy](https://github.com/Tecnativa/docker-socket-proxy), you may set the environment variable `DOCKER_HOST=tcp://docker-socket-proxy:2375`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarow%2Fdockdns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftarow%2Fdockdns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarow%2Fdockdns/lists"}