All apps Ā· 0 apps
ddns-updater
Docker app from Diamond Precision Computing's Repository
Overview
Light container updating DNS A and/or AAAA records periodically for multiple DNS providers
Features- Updates periodically A records for different DNS providers:
- Aliyun
- AllInkl
- Cloudflare
- DD24
- DDNSS.de
- DigitalOcean
- DonDominio
- DNSOMatic
- DNSPod
- Dreamhost
- DuckDNS
- DynDNS
- Dynu
- EasyDNS
- FreeDNS
- Gandi
- GCP
- GoDaddy
- He.net
- Infomaniak
- INWX
- Linode
- LuaDNS
- Name.com
- Namecheap
- Netcup
- NoIP
- Njalla
- OpenDNS
- OVH
- Porkbun
- Selfhost.de
- Servercow.de
- Spdynid
- Strato.de
- Variomedia.de
- Zoneedit
- Want more? Create an issue for it!
- Web User interface
- 11MB Docker image based on a Go static binary in a Scratch Docker image
- Persistence with a JSON file updates.json to store old IP addresses with change times for each record
- Docker healthcheck verifying the DNS resolution of your domains
- Highly configurable
- Send notifications with Shoutrrr using
SHOUTRRR_ADDRESSES - Compatible with
amd64,386,arm64,armv7,armv6,s390x,ppc64le,riscv64CPU architectures.
The program reads the configuration from a JSON object, either from a file or from an environment variable.
Create a directory of your choice, say data with a file named config.json inside:
mkdir mkdir /mnt/user/appdata/ddns-updater touch /mnt/user/appdata/ddns-updater/config.json # Owned by user ID of Docker container (1000) chown -R 1000 /mnt/user/appdata/ddns-updater # all access (for creating json database file data/updates.json) chmod 700 /mnt/user/appdata/ddns-updater # read access only chmod 400 /mnt/user/appdata/ddns-updater/config.jsonIf you want to use another user ID, build the image yourself with
--build-arg UID={your-uid}. You could also just run the container as root with--user="0"but this is not advised security wise.Write a JSON configuration in data/config.json, for example:
{ "settings": [ { "provider": "namecheap", "domain": "example.com", "host": "@", "password": "e5322165c1d74692bfa6d807100c0310" } ] }You can find more information in the configuration section to customize it.
Run the container with
docker run -d -p 8000:8000/tcp -v "$(pwd)"/data:/updater/data qmcgaw/ddns-updaterIf you use IPv6, you might need to set
-e IPV6_PREFIX=/64(/64is your prefix, depending on your ISP)(Optional) You can also set your JSON configuration as a single environment variable line (i.e.
{"settings": [{"provider": "namecheap", ...}]}), which takes precedence over config.json. Note however that if you don't bind mount the/updater/datadirectory, there won't be a persistent database file/updater/updates.jsonbut it will still work.
You can also use docker-compose.yml with:
docker-compose up -d
You can update the image with docker pull qmcgaw/ddns-updater. Other Docker image tags are available.
Images are also added to the Github Container Registry. To use the GHCR container replace qmcgaw/ddns-updater to ghcr.io/qdm12/ddns-updater, further details are available here
Start by having the following content in config.json, or in your CONFIG environment variable:
{
"settings": [
{
"provider": "",
},
{
"provider": "",
}
]
}
For each setting, you need to fill in parameters.
Check the documentation for your DNS provider:
- Aliyun
- Cloudflare
- DDNSS.de
- DigitalOcean
- DD24
- DonDominio
- DNSOMatic
- DNSPod
- Dreamhost
- DuckDNS
- DynDNS
- Dynu
- DynV6
- EasyDNS
- FreeDNS
- Gandi
- GCP
- GoDaddy
- He.net
- Infomaniak
- INWX
- Linode
- LuaDNS
- Name.com
- Namecheap
- Netcup
- NoIP
- Njalla
- OpenDNS
- OVH
- Porkbun
- Selfhost.de
- Servercow.de
- Spdyn
- Strato.de
- Variomedia.de
- Zoneedit
Note that:
- you can specify multiple hosts for the same domain using a comma separated list. For example with
"host": "@,subdomain1,subdomain2",.
CONFIG
One line JSON object containing the entire config (takes precendence over config.json file) if specified
PERIOD
5m
Default period of IP address check, following this format
IPV6_PREFIX
/128
IPv6 prefix used to mask your public IPv6 address and your record IPv6 address. Ranges from /0 to /128 depending on your ISP.
PUBLICIP_FETCHERS
all
Comma separated fetcher types to obtain the public IP address from http and dns
PUBLICIP_HTTP_PROVIDERS
all
Comma separated providers to obtain the public IP address (ipv4 or ipv6). See the Public IP section
PUBLICIPV4_HTTP_PROVIDERS
all
Comma separated providers to obtain the public IPv4 address only. See the Public IP section
PUBLICIPV6_HTTP_PROVIDERS
all
Comma separated providers to obtain the public IPv6 address only. See the Public IP section
PUBLICIP_DNS_PROVIDERS
all
Comma separated providers to obtain the public IP address (IPv4 and/or IPv6). See the Public IP section
PUBLICIP_DNS_TIMEOUT
3s
Public IP DNS query timeout
UPDATE_COOLDOWN_PERIOD
5m
Duration to cooldown between updates for each record. This is useful to avoid being rate limited or banned.
HTTP_TIMEOUT
10s
Timeout for all HTTP requests
LISTENING_PORT
8000
Internal TCP listening port for the web UI
ROOT_URL
/
URL path to append to all paths to the webUI (i.e. /ddns for accessing https://example.com/ddns through a proxy)
HEALTH_SERVER_ADDRESS
127.0.0.1:9999
Health server listening address
DATADIR
/updater/data
Directory to read and write data files from internally
BACKUP_PERIOD
0
Set to a period (i.e. 72h15m) to enable zip backups of data/config.json and data/updates.json in a zip file
BACKUP_DIRECTORY
/updater/data
Directory to write backup zip files to if BACKUP_PERIOD is not 0.
RESOLVER_ADDRESS
Your network DNS
A plaintext DNS address to use, such as 1.1.1.1:53. This is useful for split dns, see #389
LOG_LEVEL
info
Level of logging, debug, info, warning or error
LOG_CALLER
hidden
Show caller per log line, hidden or short
SHOUTRRR_ADDRESSES
(optional) Comma separated list of Shoutrrr addresses (notification services)
TZ
Timezone to have accurate times, i.e. America/Montreal
Public IP
By default, all public IP fetching types are used and cycled (over DNS and over HTTPs).
On top of that, for each fetching method, all echo services available are cycled on each request.
This allows you not to be blocked for making too many requests.
You can otherwise customize it with the following:
PUBLICIP_HTTP_PROVIDERSgets your public IPv4 or IPv6 address. It can be one or more of the following:ifconfigusing https://ifconfig.io/ipipinfousing https://ipinfo.io/ipgoogleusing https://domains.google.com/checkip- You can also specify an HTTPS URL such as
https://ipinfo.io/ip
PUBLICIPV4_HTTP_PROVIDERSgets your public IPv4 address only. It can be one or more of the following:ipifyusing https://api.ipify.orgnoipusing http://ip1.dynupdate.no-ip.com- You can also specify an HTTPS URL such as
https://ipinfo.io/ip
PUBLICIPV6_HTTP_PROVIDERSgets your public IPv6 address only. It can be one or more of the following:ipifyusing https://api6.ipify.orgnoipusing http://ip1.dynupdate6.no-ip.com- You can also specify an HTTPS URL such as
https://ipinfo.io/ip
PUBLICIP_DNS_PROVIDERSgets your public IPv4 address only or IPv6 address only or one of them (see #136). It can be one or more of the following:cloudflareopendns
If you have a host firewall in place, this container needs the following ports:
- TCP 443 outbound for outbound HTTPS
- UDP 53 outbound for outbound DNS resolution
- TCP 8000 inbound (or other) for the WebUI
At program start and every period (5 minutes by default):
- Fetch your public IP address
- For each record:
- DNS resolve it to obtain its current IP address(es)
- If the resolution fails, update the record with your public IP address by calling the DNS provider API and finish
- Check if your public IP address is within the resolved IP addresses
- Yes: skip the update
- No: update the record with your public IP address by calling the DNS provider API
- DNS resolve it to obtain its current IP address(es)
We do DNS resolution every period so it detects a change made to the record manually, for example on the DNS provider web UI
As DNS resolutions are essentially free and without rate limiting, these are great to avoid getting banned for too many requests.
For Cloudflare records with the proxied option, the following is done.
At program start and every period (5 minutes by default), for each record:
- Fetch your public IP address
- For each record:
- Check the last IP address (persisted in
updates.json) for that record- If it doesn't exist, update the record with your public IP address by calling the DNS provider API and finish
- Check if your public IP address matches the last IP address you updated the record with
- Yes: skip the update
- No: update the record with your public IP address by calling the DNS provider API
- Check the last IP address (persisted in
This is the only way as doing a DNS resolution on the record will give the IP address of a Cloudflare server instead of your server.
This has the disadvantage that if the record is changed manually, the program will not detect it.
We could do an API call to get the record IP address every period, but that would get you banned especially with a low period duration.
- The automated healthcheck verifies all your records are up to date using DNS lookups
- You can also manually check, by:
- Going to your DNS management webpage
- Setting your record to
127.0.0.1 - Run the container
- Refresh the DNS management webpage and verify the update happened
You can build the image yourself with:
docker build -t qmcgaw/ddns-updater https://github.com/qdm12/ddns-updater.git
You can use optional build arguments with --build-arg KEY=VALUE from the table below:
UID
1000
User ID running the container
GID
1000
User group ID running the container
VERSION
unknown
Version of the program and Docker image
CREATED
an unknown date
Build date of the program and Docker image
COMMIT
unknown
Commit hash of the program and Docker image
Development and contributing
- Contribute with code
- Github workflows to know what's building
- List of issues and feature requests
- Kanban board
This repository is under an MIT license
Used in external projects SupportSponsor me on Github or donate to paypal.me/qmcgaw
Many thanks to J. Famiglietti for supporting me financially
Readme
View on GitHubLightweight universal DDNS Updater program
Program to keep DNS A and/or AAAA records updated for multiple DNS providers
Versioned documentation
This readme and the docs/ directory are versioned to match the program version:
| Version | Readme link | Docs link |
|---|---|---|
| Latest | README | docs/ |
v2.8 |
README | docs/ |
v2.7 |
README | docs/ |
v2.6 |
README | docs/ |
v2.5 |
README | docs/ |
Features
Available as a Docker image
ghcr.io/qdm12/ddns-updaterandqmcgaw/ddns-updaterAvailable as zero-dependency binaries for Linux, Windows and MacOS
š Available in the AUR as
ddns-updater- see #808Updates periodically A records for different DNS providers:
- Aliyun
- AllInkl
- ChangeIP
- Cloudflare
- DD24
- DDNSS.de
- deSEC
- DigitalOcean
- Domeneshop
- DonDominio
- DNSOMatic
- DNSPod
- Dreamhost
- DuckDNS
- DynDNS
- Dynu
- DynV6
- EasyDNS
- FreeDNS
- Gandi
- GCP
- GoDaddy
- GoIP.de
- He.net
- Hetzner (legacy API)
- Hetzner Cloud
- Infomaniak
- INWX
- Ionos
- ipv64
- Linode
- Loopia
- LuaDNS
- Myaddr
- Name.com
- Namecheap
- NameSilo
- Netcup
- NoIP
- Now-DNS
- Njalla
- OpenDNS
- OVH
- Porkbun
- Route53
- Scaleway
- Selfhost.de
- Servercow.de
- Spaceship
- Spdyn
- Strato.de
- Variomedia.de
- Vultr
- Zoneedit
- Want more? Create an issue for it!
Web user interface (Desktop)

Web user interface (Mobile)

Send notifications with Shoutrrr using
SHOUTRRR_ADDRESSESContainer (Docker/K8s) specific features:
- Lightweight 12MB Docker image based on the Scratch Docker image
- Docker healthcheck verifying the DNS resolution of your domains
- Images compatible with
amd64,386,arm64,armv7,armv6,s390x,ppc64le,riscv64CPU architectures
Persistence with a JSON file updates.json to store old IP addresses with change times for each record
Setup
Binary programs
Download the pre-built program for your platform from the assets of a release in the releases page. You can alternatively download, build and install the latest version of the program by installing Go and then run
go install github.com/qdm12/ddns-updater/cmd/ddns-updater@latest.For Linux and MacOS, make the program executable with
chmod +x ddns-updater.In the directory where the program is saved, create a directory
data.Write a JSON configuration in
data/config.json, for example:{ "settings": [ { "provider": "namecheap", "domain": "sub.example.com", "password": "e5322165c1d74692bfa6d807100c0310" } ] }You can find more information in the configuration section to customize it.
Run the program with
./ddns-updater(./ddns-updater.exeon Windows) or by double-clicking on it.The following is optional.
- You can customize the program behavior using either environment variables or flags. For flags, there is a flag corresponding to each environment variable, where it's all lowercase and underscores are replaced with dashes. For example the environment variable
LOG_LEVELtranslates into--log-level.
- You can customize the program behavior using either environment variables or flags. For flags, there is a flag corresponding to each environment variable, where it's all lowercase and underscores are replaced with dashes. For example the environment variable
Container
ā”ļø Qnap guide by @Araminta
Create a directory, for example, data which is:
- owned by user id
1000, which is the built-in user ID of the ddns-updater container - has user read+write+execute permissions
mkdir data chown 1000 data chmod u+r+w+x dataIf you want to use another user ID, build the image yourself with
--build-arg UID=<your-uid>. You could also just run the container as root with--user="0"but this is not advised security wise.- owned by user id
Similarly, create a data/config.json file which is:
- owned by user id
1000 - has user read permissions
touch data/config.json chmod u+r data/config.json- owned by user id
Edit data/config.json, for example:
{ "settings": [ { "provider": "namecheap", "domain": "sub.example.com", "password": "e5322165c1d74692bfa6d807100c0310" } ] }You can find more information in the configuration section to customize it.
Run the container with
docker run -d -p 8000:8000/tcp -v "$(pwd)"/data:/updater/data ghcr.io/qdm12/ddns-updaterThe following is optional.
- You can customize the program behavior using environment variables
- You can use docker-compose.yml with
docker-compose up -d - Kubernetes: check out the k8s directory for an installation guide and examples.
- Other Docker image tags are available
- You can update the image with
docker pull ghcr.io/qdm12/ddns-updater - You can set your JSON configuration as a single environment variable line (i.e.
{"settings": [{"provider": "namecheap", ...}]}), which takes precedence over config.json. Note however that if you don't bind mount the/updater/datadirectory, there won't be a persistent database file/updater/updates.jsonbut it will still work.
Configuration
Start by having the following content in config.json, or in your CONFIG environment variable:
{
"settings": [
{
"provider": "",
},
{
"provider": "",
}
]
}
For each setting, you need to fill in parameters. Check the documentation for your DNS provider:
- Aliyun
- Allinkl
- ChangeIP
- Cloudflare
- DD24
- DDNSS.de
- deSEC
- DigitalOcean
- Domeneshop
- DonDominio
- DNSOMatic
- DNSPod
- Dreamhost
- DuckDNS
- DynDNS
- Dynu
- DynV6
- EasyDNS
- FreeDNS
- Gandi
- GCP
- GoDaddy
- GoIP.de
- He.net
- Hetzner
- HetznerCloud
- Infomaniak
- INWX
- Ionos
- IPv64
- Linode
- Loopia
- LuaDNS
- Myaddr
- Name.com
- Namecheap
- NameSilo
- Netcup
- NoIP
- Now-DNS
- Njalla
- OpenDNS
- OVH
- Porkbun
- Route53
- Scaleway
- Selfhost.de
- Servercow.de
- Spaceship
- Spdyn
- Strato.de
- Variomedia.de
- Vultr
- Zoneedit
- Custom
Note that:
- you can specify multiple owners/hosts for the same domain using a comma separated list. For example with
"domain": "example.com,sub.example.com,sub2.example.com",. ā ļø this is a bit different for DuckDNS and GoIP, see their respective documentation.
Environment variables
š There are now flags equivalent for each variable below, for example --log-level.
| Environment variable | Default | Description |
|---|---|---|
CONFIG |
One line JSON object containing the entire config (takes precedence over config.json file) if specified | |
PERIOD |
5m |
Default period of IP address check, following this format |
PUBLICIP_FETCHERS |
all |
Comma separated fetcher types to obtain the public IP address from http and dns |
PUBLICIP_HTTP_PROVIDERS |
all |
Comma separated providers to obtain the public IP address (ipv4 or ipv6). See the Public IP section |
PUBLICIPV4_HTTP_PROVIDERS |
all |
Comma separated providers to obtain the public IPv4 address only. See the Public IP section |
PUBLICIPV6_HTTP_PROVIDERS |
all |
Comma separated providers to obtain the public IPv6 address only. See the Public IP section |
PUBLICIP_DNS_PROVIDERS |
all |
Comma separated providers to obtain the public IP address (IPv4 and/or IPv6). See the Public IP section |
PUBLICIP_DNS_TIMEOUT |
3s |
Public IP DNS query timeout |
UPDATE_COOLDOWN_PERIOD |
5m |
Duration to cooldown between updates for each record. This is useful to avoid being rate limited or banned. |
HTTP_TIMEOUT |
10s |
Timeout for all HTTP requests |
SERVER_ENABLED |
yes |
Enable the web server and web UI |
LISTENING_ADDRESS |
:8000 |
Internal TCP listening port for the web UI |
ROOT_URL |
/ |
URL path to append to all paths to the webUI (i.e. /ddns for accessing https://example.com/ddns through a proxy) |
HEALTH_SERVER_ADDRESS |
127.0.0.1:9999 |
Health server listening address |
HEALTH_HEALTHCHECKSIO_BASE_URL |
https://hc-ping.com |
Base URL for the healthchecks.io server |
HEALTH_HEALTHCHECKSIO_UUID |
UUID to idenfity with the healthchecks.io server | |
DATADIR |
/updater/data |
Directory to read and write data files from internally |
CONFIG_FILEPATH |
/updater/data/config.json |
Path to the JSON configuration file |
BACKUP_PERIOD |
0 |
Set to a period (i.e. 72h15m) to enable zip backups of data/config.json and data/updates.json in a zip file |
BACKUP_DIRECTORY |
/updater/data |
Directory to write backup zip files to if BACKUP_PERIOD is not 0. |
RESOLVER_ADDRESS |
Your network DNS | A plaintext DNS address to use to resolve your domain names defined in your settings only. For example it can be 1.1.1.1:53. This is useful for split dns, see #389 |
LOG_LEVEL |
info |
Level of logging, debug, info, warning or error |
LOG_CALLER |
hidden |
Show caller per log line, hidden or short |
SHOUTRRR_ADDRESSES |
(optional) Comma separated list of Shoutrrr addresses (notification services) | |
SHOUTRRR_DEFAULT_TITLE |
DDNS Updater |
Default title for Shoutrrr notifications |
TZ |
Timezone to have accurate times, i.e. America/Montreal |
|
UMASK |
System current umask | Umask to set for the program in octal, i.e. 0022 |
Public IP
By default, all public IP fetching types are used and cycled (over DNS and over HTTPs).
On top of that, for each fetching method, all echo services available are cycled on each request.
This allows you not to be blocked for making too many requests.
You can otherwise customize it with the following:
PUBLICIP_HTTP_PROVIDERSgets your public IPv4 or IPv6 address. It can be one or more of the following:ipifyusing https://api64.ipify.orgifconfigusing https://ifconfig.io/ipipinfousing https://ipinfo.io/ipspdynusing https://checkip.spdyn.deipleakusing https://ipleak.net/jsonicanhazipusing https://icanhazip.comidentusing https://ident.mennevusing https://ip.nnev.dewtfismyipusing https://wtfismyip.com/textseeipusing https://api.seeip.orgchangeipusing https://ip.changeip.com- You can also specify an HTTPS URL with prefix
url:for exampleurl:https://ipinfo.io/ip
PUBLICIPV4_HTTP_PROVIDERSgets your public IPv4 address only. It can be one or more of the following:ipleakusing https://ipv4.ipleak.net/jsonipifyusing https://api.ipify.orgicanhazipusing https://ipv4.icanhazip.comidentusing https://v4.ident.mennevusing https://ip4.nnev.dewtfismyipusing https://ipv4.wtfismyip.com/textseeipusing https://ipv4.seeip.org- You can also specify an HTTPS URL with prefix
url:for exampleurl:https://ipinfo.io/ip
PUBLICIPV6_HTTP_PROVIDERSgets your public IPv6 address only. It can be one or more of the following:ipleakusing https://ipv6.ipleak.net/jsonipifyusing https://api6.ipify.orgicanhazipusing https://ipv6.icanhazip.comidentusing https://v6.ident.mennevusing https://ip6.nnev.dewtfismyipusing https://ipv6.wtfismyip.com/textseeipusing https://ipv6.seeip.org- You can also specify an HTTPS URL with prefix
url:for exampleurl:https://ipinfo.io/ip
PUBLICIP_DNS_PROVIDERSgets your public IPv4 address only or IPv6 address only or one of them (see #136). It can be one or more of the following:cloudflareopendns
Host firewall
If you have a host firewall in place, this container needs the following ports:
- TCP 443 outbound for outbound HTTPS
- UDP 53 outbound for outbound DNS resolution
- TCP 8000 inbound (or other) for the WebUI
Architecture
At program start and every period (5 minutes by default):
- Fetch your public IP address
- For each record:
- DNS resolve it to obtain its current IP address(es)
- If the resolution fails, update the record with your public IP address by calling the DNS provider API and finish
- Check if your public IP address is within the resolved IP addresses
- Yes: skip the update
- No: update the record with your public IP address by calling the DNS provider API
- DNS resolve it to obtain its current IP address(es)
š” We do DNS resolution every period so it detects a change made to the record manually, for example on the DNS provider web UI š” As DNS resolutions are essentially free and without rate limiting, these are great to avoid getting banned for too many requests.
Special case: Cloudflare
For Cloudflare records with the proxied option, the following is done.
At program start and every period (5 minutes by default), for each record:
- Fetch your public IP address
- For each record:
- Check the last IP address (persisted in
updates.json) for that record- If it doesn't exist, update the record with your public IP address by calling the DNS provider API and finish
- Check if your public IP address matches the last IP address you updated the record with
- Yes: skip the update
- No: update the record with your public IP address by calling the DNS provider API
- Check the last IP address (persisted in
This is the only way as doing a DNS resolution on the record will give the IP address of a Cloudflare server instead of your server.
ā ļø This has the disadvantage that if the record is changed manually, the program will not detect it. We could do an API call to get the record IP address every period, but that would get you banned especially with a low period duration.
Testing
- The automated healthcheck verifies all your records are up to date using DNS lookups
- You can also manually check, by:
- Going to your DNS management webpage
- Setting your record to
127.0.0.1 - Run the container
- Refresh the DNS management webpage and verify the update happened
Build the image
You can build the image yourself with:
docker build -t ghcr.io/qdm12/ddns-updater https://github.com/qdm12/ddns-updater.git
You can use optional build arguments with --build-arg KEY=VALUE from the table below:
| Build argument | Default | Description |
|---|---|---|
UID |
1000 |
User ID running the container |
GID |
1000 |
User group ID running the container |
VERSION |
unknown |
Version of the program and Docker image |
CREATED |
an unknown date |
Build date of the program and Docker image |
COMMIT |
unknown |
Commit hash of the program and Docker image |
Development and contributing
License
This repository is under an MIT license
Used in external projects
Support
Sponsor me on Github or donate to paypal.me/qmcgaw
Many thanks to J. Famiglietti for supporting me financially š„š
Install ddns-updater on Unraid in a few clicks.
Find ddns-updater in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Download Statistics
Total Downloads Over Time
Related apps
Explore more like this
Explore allLinks
Details
qmcgaw/ddns-updaterRuntime arguments
- Web UI
http://[IP]:[PORT:8000]- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Container Port: 8000
- Target
- 8000
- Default
- 8000
Container Path: /updater/data
- Target
- /updater/data
- Default
- /mnt/user/appdata/ddns-updater
- Value
- /mnt/user/appdata/ddns-updater
Timezone to have accurate times, i.e. America/Montreal
Comma separated fetcher types to obtain the public IP address from http and dns
- Default
- all|http|dns
- Value
- all
PUBLICIP_HTTP_PROVIDERS gets your public IPv4 or IPv6 address. It can be one or more of the following: (default:all), opendns, ifconfig, ipinfo, ddns, google. You can also specify an HTTPS URL such as https://ipinfo.io/ip
- Default
- all
- Value
- all
PUBLICIPV4_HTTP_PROVIDERS gets your public IPv4 address only. It can be one or more of the following: (default:all), ipify, noip. You can also specify an HTTPS URL such as https://ipinfo.io/ip
- Default
- all
- Value
- all
PUBLICIPV6_HTTP_PROVIDERS gets your public IPv6 address only. It can be one or more of the following: (default:all), ipify, noip. You can also specify an HTTPS URL such as https://ipinfo.io/ip
- Default
- all
- Value
- all
PUBLICIP_DNS_PROVIDERS gets your public IPv4 address only or IPv6 address only or one of them. It can be one or more of the following: (default:all), google, cloudflare,
- Default
- all
- Value
- all
Public IP DNS query timeout (in seconds)
- Default
- 3s
- Value
- 3s
Duration to cooldown between updates for each record. This is useful to avoid being rate limited or banned. (in minutes)
- Default
- 5m
- Value
- 5m
Timeout for all HTTP requests (in seconds)
- Default
- 10s
- Value
- 10s
Directory to read and write data files from internally
- Default
- /updater/data/backup
- Value
- /updater/data/backup
Set to a period (i.e. 72h15m) to enable zip backups of data/config.json and data/updates.json in a zip file
- Default
- 0
- Value
- 0
Level of logging, debug, info, warning or error
- Default
- info|warning|error|debug
- Value
- info
Container Variable: LOG_CALLER
- Default
- hidden|short
- Value
- hidden
URL path to append to all paths to the webUI (i.e. /ddns for accessing https://example.com/ddns through a proxy)
- Default
- /
- Value
- /
(optional) Comma separated list of Shoutrrr addresses (notification services) -- (See GitHub Documentation)
Health server listening address
- Default
- 127.0.0.1:9999
- Value
- 127.0.0.1:9999