DDNS 镜像版本(Docker Tag):
latest
: 最新稳定版next
: 下一个版本edge
最新开发版,不稳定docker pull newfuture/ddns:latest
docker pull newfuture/ddns:next
您也可以指定特定版本,例如:
docker pull newfuture/ddns:v4.0.0
镜像会同步发布到以下源:
docker.io/newfuture/ddns
ghcr.io/newfuture/ddns
支持 docker pull ghcr.io/newfuture/ddns
DDNS Docker 镜像支持三种配置方式:命令行,环境变量和配置文件。
注意:
-v
挂载配置文件或目录,确保容器内的 /ddns/
目录包含有效的配置文件(如 config.json
),否则 DDNS 将无法正常工作。--network host
,请确保您的 Docker 守护进程已正确配置以支持此模式。-d
参数可以让容器在后台运行, 使用前请确保您了解 Docker 的基本操作。-e DDNS_XXX=YYY
参数可以设置环境变量,容器内的 DDNS 程序会自动读取这些变量。可以参考命令行参数说明获取详细的参数列表。
此时 docker run -v /local/config/:/ddns/ --name=ddns --network=host newfuture/ddns
就相当于 ddns
命令行,不会执行定时任务。
此方式适合需要一次性运行或调试的场景, 参数与 DDNS 命令行参数一致。
# 查看ddns命令行参数 等价于 ddns -h
docker run --rm newfuture/ddns -h
# 加上ddns的 --debug 参数可以启用调试模式(或者 --log.level=debug)
docker run --rm --network=host newfuture/ddns --debug --dns=dnspod --id=12345 --token=mytokenkey --ipv4=www.example.com --ipv4=ipv4.example.com --index4 public
# 容器内调试
docker run -it newfuture/ddns sh
Docker 容器内的工作目录是 /ddns/
,默认配置文件会被映射到容器内的 /ddns/config.json
。
docker run -d -v /host/config/:/ddns/ newfuture/ddns
其中 /host/config/
是您本地包含 config.json
的目录。
详见 config.json
的内容可以参考 JSON 配置文件说明。
环境变量和命令行参数类似, 加上 DDNS 前缀,推荐全大写。数组类型需要使用 JSON 格式或者单引号包裹。
当然也可以使用 --env-file
参数来加载环境变量文件。
docker run -d \
-e DDNS_DNS=dnspod \
-e DDNS_ID=12345 \
-e DDNS_TOKEN=mytokenkey \
-e DDNS_IPV4='["example.com","www.example.com"]' \
-e DDNS_INDEX4='["public",0]' \
--network host \
--name ddns \
newfuture/ddns
想要了解所有支持的环境变量,请参考环境变量配置说明。
使用 --network host
可让容器直接使用宿主机的网络,这样 DDNS 可以正确获取宿主机的 IP 地址。
对于 Public 或者 url 通常不需要设置 host。
docker run -d \
-e DDNS_DNS=dnspod \
-e DDNS_ID=12345 \
-e DDNS_TOKEN=mytokenkey \
-e DDNS_IPV4=example.com \
--network host \
newfuture/ddns
如果您不想使用 host 网络模式,也可以使用默认的 bridge 模式,但需要注意此时容器具有自己的 IP,您需要使用 public
模式获取公网 IP:
docker run -d \
-e DDNS_DNS=dnspod \
-e DDNS_ID=12345 \
-e DDNS_TOKEN=mytokenkey \
-e DDNS_IPV4=example.com \
-e DDNS_INDEX4=public \
newfuture/ddns
环境变量方式配置多域名:
docker run -d \
-e DDNS_DNS=dnspod \
-e DDNS_ID=12345 \
-e DDNS_TOKEN=mytokenkey \
-e DDNS_IPV4='["example.com", "www.example.com", "sub.example.com"]' \
--network host \
newfuture/ddns
命令行参数方式配置多域名:
docker run --rm --network host newfuture/ddns \
--dns dnspod \
--id 12345 \
--token mytokenkey \
--ipv4 ipv4.example.com \
--ipv4 www.example.com
要在 Docker 容器中使用 IPv6,需要确保 Docker 守护程序配置了 IPv6 支持:
/etc/docker/daemon.json
:{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80"
}
sudo systemctl restart docker
docker run -d \
--network host \
-e DDNS_DNS=dnspod \
-e DDNS_ID=12345 \
-e DDNS_TOKEN=mytokenkey \
-e DDNS_IPV6=example.com \
newfuture/ddns
创建 docker-compose.yml
文件:
version: "3"
services:
ddns:
image: newfuture/ddns:latest
restart: always
network_mode: host
environment:
- DDNS_DNS=dnspod
- DDNS_ID=12345
- DDNS_TOKEN=mytokenkey
- DDNS_IPV4=example.com,www.example.com
- DDNS_INDEX4=['public','url:https://api.ipify.org']
- DDNS_LOG_LEVEL=WARNING
version: "3"
services:
ddns:
image: newfuture/ddns:latest
restart: always
network_mode: host
volumes:
- ./config:/ddns
运行 Docker Compose:
docker-compose up -d
如果您需要在容器中添加其他工具或自定义环境,可以基于官方镜像创建自己的 Dockerfile:
FROM newfuture/ddns:latest
# 安装额外的工具
RUN apk add --no-cache curl
# 添加自定义脚本
COPY custom-script.sh /bin/
RUN chmod +x /bin/custom-script.sh
# 覆盖默认入口点(可选)
# ENTRYPOINT ["/bin/custom-script.sh"]
问题: DDNS 无法正确获取主机 IP
解决方案:
--network host
网络模式-e DDNS_INDEX4=public
强制使用公网 API 获取 IP问题: 容器运行但不自动更新 DNS
解决方案:
docker logs ddns
docker ps -a
docker exec ddns /bin/ddns
问题: 容器启动后立即退出
解决方案:
-it
参数以交互方式运行查看问题 docker run -it --rm newfuture/ddns
问题: 容器无法连接到 DNS 服务商 API
解决方案:
docker exec ddns ping api.dnspod.cn
-e DDNS_PROXY=http://proxy:port