
jusaba/dns本镜像为miniDynDns的客户端实现,用于在DNS服务器上动态更新主机的IP地址。适用于需要保持DNS记录与主机当前IP一致的场景,支持同时配置多个DNS服务器,通过环境变量灵活设置,并定期自动刷新IP信息。
适用于主机IP地址可能动态变化的环境,需要保持DNS记录实时更新的场景,例如:
bashdocker pull jusaba/dns:latest
构建镜像需准备以下文件:
dockerfileFROM debian:bookworm-slim ENV TZ=Europe/Madrid LABEL version=2.0 LABEL autor=Julian_Salas RUN apt-get update -y && \ apt-get upgrade -y && \ apt-get install -y --no-install-recommends \ cron \ python3 \ python3-requests && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* COPY ./start.sh /home/pi/ip/start.sh WORKDIR /home/pi/ip CMD ["bash", "start.sh"]
bash#!/bin/bash # /home/pi/ip/start.sh # 支持任意数量的DNS服务器 # 服务器通过SERVIDORES变量传入,以逗号分隔 # 示例: SERVIDORES=dns1.com,dns2.com,dns3.com # 或通过servidor1, servidor2等变量(兼容旧版本) rm -f /home/pi/ip/ActualizaDNS.py touch /home/pi/ip/ActualizaDNS.py rm -f /var/spool/cron/crontabs/root touch /var/spool/cron/crontabs/root # 生成获取公网IP并发送更新请求的Python脚本 echo "import requests" >> /home/pi/ip/ActualizaDNS.py echo "from requests.auth import HTTPBasicAuth" >> /home/pi/ip/ActualizaDNS.py echo "" >> /home/pi/ip/ActualizaDNS.py echo "# 获取公网IP" >> /home/pi/ip/ActualizaDNS.py echo "try:" >> /home/pi/ip/ActualizaDNS.py echo " myip = requests.get('[***] timeout=10).text.strip()" >> /home/pi/ip/ActualizaDNS.py echo "except:" >> /home/pi/ip/ActualizaDNS.py echo " myip = requests.get('[***] timeout=10).text.strip()" >> /home/pi/ip/ActualizaDNS.py echo "" >> /home/pi/ip/ActualizaDNS.py # 使用SERVIDORES变量(推荐方式) if [ -n "$SERVIDORES" ]; then echo "$SERVIDORES" | tr ',' '\n' | while read servidor; do servidor=$(echo "$servidor" | tr -d ' ') if [ -n "$servidor" ]; then echo "requests.get(f'[***]{servidor}:8001/?myip={myip}', auth=HTTPBasicAuth('$host', '$password'))" >> /home/pi/ip/ActualizaDNS.py fi done else # 使用编号变量(兼容旧版本) i=1 while true; do eval servidor=\$servidor$i if [ -z "$servidor" ]; then break fi echo "requests.get(f'[***]{servidor}:8001/?myip={myip}', auth=HTTPBasicAuth('$host', '$password'))" >> /home/pi/ip/ActualizaDNS.py i=$((i + 1)) done fi # 配置定时任务 service cron stop chmod 600 /var/spool/cron/crontabs/root echo "*/${refresco} * * * * python3 /home/pi/ip/ActualizaDNS.py" >> /var/spool/cron/crontabs/root service cron reload cron -f
使用buildx构建多平台镜像:
bashdocker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 -t jusaba/dns:latest . --push
项目包含GitHub Actions工作流,在以下情况自动构建并推送镜像:
main分支v*的标签(如v1.0.0)需配置GitHub Secrets:
DOCKER_USERNAME:Docker Hub用户名DOCKER_PASSWORD:Docker Hub密码或访问令牌| 变量名 | 描述 |
|---|---|
host | 主机名(如"lleida"对应"lleida.dominio.es"),需已在DNS服务器注册 |
refresco | IP刷新间隔(分钟) |
password | 主机在DNS服务器注册时的密码 |
SERVIDORES | DNS服务器列表,逗号分隔(推荐),如"dns1.com,dns2.com" |
servidor1, servidor2... | 编号DNS服务器变量(兼容旧版本) |
bashdocker run -e host=lleida \ -e refresco=1 \ -e password=passlleida \ -e SERVIDORES=dns1.com,dns2.com \ -d --name dns jusaba/dns:latest
bashdocker run -e host=lleida \ -e refresco=1 \ -e password=passlleida \ -e servidor1=dns1.com \ -e servidor2=dns2.com \ -d --name dns jusaba/dns:latest
创建parametros.env文件:
envhost=lleida refresco=1 password=passlleida SERVIDORES=dns1.com,dns2.com
启动容器:
bashdocker run --env-file parametros.env -d --name dns jusaba/dns:latest
Julián Salas Barolome - 开发与文档
本项目可作为miniDynDns客户端自由使用。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务