linuxserver/duckdnsDuckDNS 是一项免费服务,可将 DNS(duckdns.org 的子域名)指向用户指定的 IP 地址。该服务完全免费,无需重新激活或发布论坛帖子即可维持使用。
linuxserver/duckdns 是由 LinuxServer.io 团队开发的容器化版本,提供了便捷的 DuckDNS 动态 DNS 更新功能,支持定期 IP 地址同步、用户权限映射及多架构部署。
该镜像利用 Docker 清单实现多平台支持,拉取 lscr.io/linuxserver/duckdns:latest 即可自动获取对应架构的镜像,也可通过标签指定特定架构:
| 架构 | 支持情况 | 标签格式 |
|---|---|---|
| x86-64 | ✅ | amd64-<version tag> |
| arm64 | ✅ | arm64v8-<version tag> |
user.duckdns.org,则设置 SUBDOMAINS=useroverseerr.user.duckdns.org 只需配置 user)使用 UPDATE_IP 变量(无论值为 ipv4、ipv6 或 both)时,将通过外部 Cloudflare whoami 服务检测公网 IP 地址。请注意,使用此变量会查询 DuckDNS 以外的第三方服务。
省略 UPDATE_IP 变量时,将使用 DuckDNS 自身的检测机制,且仅支持 IPv4。
该镜像支持以只读容器文件系统运行,详细配置请参考 LinuxServer 只读文档。
yaml--- services: duckdns: image: lscr.io/linuxserver/duckdns:latest container_name: duckdns network_mode: host # 可选 environment: - PUID=1000 # 可选 - PGID=1000 # 可选 - TZ=Etc/UTC # 可选 - SUBDOMAINS=subdomain1,subdomain2 # 必填 - TOKEN=your_duckdns_token # 必填 - UPDATE_IP=ipv4 # 可选,值为 ipv4/ipv6/both - LOG_FILE=false # 可选,设为 true 需映射 /config 卷 volumes: - /path/to/duckdns/config:/config # 可选,日志存储和配置持久化 restart: unless-stopped
bashdocker run -d \ --name=duckdns \ --net=host `# 可选` \ -e PUID=1000 `# 可选` \ -e PGID=1000 `# 可选` \ -e TZ=Etc/UTC `# 可选` \ -e SUBDOMAINS=subdomain1,subdomain2 `# 必填` \ -e TOKEN=your_duckdns_token `# 必填` \ -e UPDATE_IP=ipv4 `# 可选,值为 ipv4/ipv6/both` \ -e LOG_FILE=false `# 可选,设为 true 需映射 /config 卷` \ -v /path/to/duckdns/config:/config `# 可选` \ --restart unless-stopped \ lscr.io/linuxserver/duckdns:latest
| 参数 | 功能说明 | 是否必填 | 示例值 |
|---|---|---|---|
| PUID | 运行容器的用户 ID | 可选 | 1000 |
| PGID | 运行容器的组 ID | 可选 | 1000 |
| TZ | 时区设置 | 可选 | Asia/Shanghai |
| SUBDOMAINS | DuckDNS 子域名,多个用逗号分隔 | 是 | user1,user2 |
| TOKEN | DuckDNS 账号令牌 | 是 | abcdef*** |
| UPDATE_IP | IP 更新类型,支持 ipv4/ipv6/both | 可选 | both |
| LOG_FILE | 是否记录日志到文件(需映射 /config 卷) | 可选 | true |
| UMASK | 服务 umask 设置 | 可选 | 022 |
| 参数 | 功能说明 | 是否必填 |
|---|---|---|
| /config | 持久化配置文件和日志存储 | 可选 |
| 参数 | 功能说明 | 是否必填 |
|---|---|---|
| --net=host | 主机网络模式(IPv6 和 both 模式必需) | 可选 |
| 参数 | 功能说明 | 是否必填 |
|---|---|---|
| --read-only=true | 以只读文件系统运行容器 | 可选 |
可通过 FILE__ 前缀从文件加载环境变量,例如:
bash-e FILE__TOKEN=/run/secrets/duckdns_token
此命令将从 /run/secrets/duckdns_token 文件内容设置 TOKEN 环境变量。
所有 LinuxServer 镜像支持通过 -e UMASK=022 覆盖默认 umask 设置。umask 用于控制文件创建权限,其值为权限掩码而非直接权限值,详情请参考 umask 文档。
使用卷挂载时,主机与容器间可能出现权限问题。通过指定 PUID(用户 ID)和 PGID(组 ID)可避免此类问题。确保主机上的卷目录所有者与指定的 PUID/PGID 一致。
获取当前用户的 PUID/PGID:
bashid your_username
示例输出:
textuid=1000(your_username) gid=1000(your_username) groups=1000(your_username)
仅在挂载
/config卷时需要设置 PUID 和 PGID。
可通过 Docker Mods 扩展容器功能:
bashdocker exec -it duckdns /bin/bash
bashdocker logs -f duckdns
bashdocker inspect -f '{{ index .Config.Labels "build_version" }}' duckdns
bashdocker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/duckdns:latest
更新所有镜像:
bashdocker-compose pull
更新单个镜像:
bashdocker-compose pull duckdns
重启容器:
bashdocker-compose up -d
清理旧镜像:
bashdocker image prune
拉取最新镜像:
bashdocker pull lscr.io/linuxserver/duckdns:latest
停止并删除当前容器:
bashdocker stop duckdns && docker rm duckdns
使用原参数重新创建容器(若正确映射 /config 卷,配置将保留)
清理旧镜像:
bashdocker image prune
推荐使用 Diun 接收镜像更新通知,不建议使用自动更新容器的工具。
如需自定义镜像,可按以下步骤本地构建:
bashgit clone [***] cd docker-duckdns docker build \ --no-cache \ --pull \ -t lscr.io/linuxserver/duckdns:latest .
跨架构构建(如 x86_64 构建 arm64 镜像):
bash# 注册 QEMU 静态二进制 docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset # 构建特定架构镜像 docker build -f Dockerfile.aarch64 -t lscr.io/linuxserver/duckdns:arm64v8-latest .
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务