cloudflare-ddns Docker & Self-Hosted Deployment

GitHub

Rust based dynamic DNS (DDNS) updater for Cloudflare

RAW Compose
1. Pull Image (DOCKERHUB) docker pull timothyjmiller/cloudflare-ddns
2. Docker Run (1-Click Launch) docker run -d --name cloudflare-ddns --restart always timothyjmiller/cloudflare-ddns:2.3.0
3. Podman Run podman run -d --name cloudflare-ddns --restart always timothyjmiller/cloudflare-ddns:2.3.0
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/timothyjmiller/cloudflare-ddns:2.3.0
5. ORAS Pull (OCI Artifact) oras pull timothyjmiller/cloudflare-ddns:2.3.0
6. Compose Deployment docker compose up -d
docker/docker-compose.yml
Download .yml
# cloudflare-ddns โ€” environment-variable mode (recommended).
#
#   docker compose -f docker/docker-compose.yml up -d
#
# Host networking is only needed for IPv6 detection. If you only need IPv4,
# remove `network_mode: host` and set IP6_PROVIDER=none.
services:
  cloudflare-ddns:
    # Pin a release tag (2.3.0, 2.3, or 2) instead of `latest` for predictable upgrades.
    image: timothyjmiller/cloudflare-ddns:2.3.0
    container_name: cloudflare-ddns
    security_opt:
      - no-new-privileges:true
    network_mode: host
    environment:
      # Token needs Zone > DNS > Edit and Zone > Zone > Read on the target zones.
      # Prefer CLOUDFLARE_API_TOKEN_FILE with a Docker secret (see README).
      - CLOUDFLARE_API_TOKEN=YOUR-CLOUDFLARE-API-TOKEN
      - DOMAINS=example.com,www.example.com
      - PROXIED=false
      - TTL=1
      - UPDATE_CRON=@every 5m
      # - IP6_PROVIDER=none
      # - HEALTHCHECKS=https://hc-ping.com/your-uuid
      # - UPTIMEKUMA=https://kuma.example.com/api/push/your-token
      # - SHOUTRRR=discord://token@webhook-id
    restart: unless-stopped