0x01 前言
我计划将家里的所有服务都通过 Docker 实现,阿里云的 DDNS 服务也在该计划中。今天终于有时间花一点点时间改造之前编写的 Python 脚本,使其适配在容器内运行的要求。
与此同时,还有一个必不可少的 Dockerfile,如果不想自己 build,你还可以在本文底部找到 Docker Hub 的链接,通过 Docker run 命令使用。
0x02 脚本
实现 DNS IP地址更新的核心只有一个 Python 脚本,你可以从以下地址找到该脚本及其 Dockerfile:
你还可以从以下地址找到单机运行的旧脚本及配置文件模板:
如果你有留意我的博客,那你应该知道我有以下与 DDNS 相关的文章:
为了适配 Docker,我将日志的部分移除,日志通过标准输出至 Docker,但我计划增加一个变量,让用户控制是否需要将日志保存至一个文件中。因为时间的关系,目前只支持单域名,与单机版脚本的多域名有所区别。
除了日志模块的移除,我还移除读取日志文件的部分,以传参的形式传递必要的内容:
parser = argparse.ArgumentParser(description="aliyun ddns via NGX.HK") parser.add_argument('--domain', type=str, default=None, required=True) parser.add_argument('--subdomain', type=str, default=None, required=True) parser.add_argument('--ttl', type=int, default=600) parser.add_argument('--ver', type=int, default=4) parser.add_argument('--id', type=str, default=None, required=True) parser.add_argument('--sk', type=str, default=None, required=True) parser.add_argument('--time', type=int, default=60)
- –domain:域名,必填
- –subdomain:子域名,必填
- –ttl:免费用户最低为600秒,免费用户低于此值时,阿里会回传错误,可选
- –ver:网际协议本版,默认为 IPv4,可选
- –id:阿里云 API KeyID,必填
- –sk:阿里云 API Secret Key,必填
- –time:轮询时间,默认为60秒,可选
主要逻辑与之前的没任何变化,而 Dockerfile 也极其简单:
FROM python:3.6.9-alpine3.9 LABEL maintainer "[email protected]" RUN pip install aliyun-python-sdk-core-v3 aliyun-python-sdk-alidns requests ADD ./aliyun_ddns.py ./ ENTRYPOINT ["python", "aliyun_ddns.py"]
当然,你还可以通过以下地址找到最新的 Docker 镜像:
0x03 使用
首先,请参照上面的文章链接,取得自己的域名、子域名、阿里云 API KeyID与Secret Key,然后通过以下命令运行即可:
docker run -itd \ --name [container name] \ ngxproj/aliyun_ddns:[tag name] \ --domain=ngx.hk \ --subdomain=ddns \ --id=xxxx \ --sk=xxxx
例如:
docker run -itd \ --name ali-ddns \ ngxproj/aliyun_ddns:v1.1 \ --domain=ngx.hk \ --subdomain=ddns \ --id=xxxx \ --sk=xxxx
结果如下:
查看日志:
使用 Rancher 运行也极其方便,只需要在 CMD 对话框中填入参数即可:
成功运行后即可进入相关页面检查状态:
还可以检查日志:
0x04 结语
如果需要使用 IPv6,请确认你的容器支持并已经拥有 IPv6,如果发现报错,请保存日志并与我取得联系。近期会更新一些小功能,请关注我的博客或 Gitlab,如果有其他需求,也欢迎与我联系。