
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
基于 https://hub.docker.com/r/joohoi/acme-dns 镜像构建,适用于 linux/arm/v7 架构。

acme-dns是一个简化的DNS服务器,提供RESTful HTTP API,用于简单地自动化ACME DNS挑战验证过程。
许多DNS服务器不提供API来实现ACME DNS挑战的自动化。那些提供API的服务器通常赋予密钥过多权限,而将这些密钥存放在各种设备上是实现有意义的流程自动化的常见要求。
acme-dns提供专门用于TXT记录更新的简单API,应与ACME专用的"_acme-challenge"子域CNAME记录一起使用。这样,即使API密钥不幸泄露,影响也仅限于相关的子域TXT记录。
因此,acme-dns的核心价值在于可访问性和安全性。
有关底层问题和其他解决方案的详细说明,请参阅EFF deeplinks博客上的相关文章:[***]
yourdomain.tld和*.yourdomain.tld证书的挑战acme-dns的Certbot认证钩子可在以下位置获取:https://github.com/joohoi/acme-dns-certbot%E3%80%82
:
_acme-challenge.domainiwantcertfor.tld. CNAME a097455b-52cc-4569-90c8-7a4b97c6eba8.auth.example.org)该方法返回新的唯一子域和更新记录所需的凭据。fulldomain是您可以将自己的_acme-challenge子域CNAME记录指向的地址。使用这些凭据,您可以更新服务中的TXT响应以匹配挑战令牌(CA提供的___validation_token_received_from_the_ca___)。
可选:您可以POST JSON数据来限制/update请求到预定义的源网络(使用CIDR表示法)。
POST /register
可选示例输入
json{ "allowfrom": [ "192.168.100.1/24", "1.2.3.4/32", "2002:c0a8:2a00::0/40" ] }
响应
Status: 201 Created
json{ "allowfrom": [ "192.168.100.1/24", "1.2.3.4/32", "2002:c0a8:2a00::0/40" ], "fulldomain": "8e5700ea-a4bf-41c7-8a77-e990661dcc6a.auth.acme-dns.io", "password": "htB9mR9DYgcu9bX_afHF62erXaH2TS7bg9KW3F7Z", "subdomain": "8e5700ea-a4bf-41c7-8a77-e990661dcc6a", "username": "c36f50e8-4632-44f0-83fe-e070fef28a10" }
该方法允许您更新唯一子域的TXT记录内容。通常由自动化ACME客户端执行。
POST /update
必需请求头
| 头名称 | 描述 | 示例 |
|---|---|---|
| X-Api-User | 注册时收到的UUIDv4用户名 | X-Api-User: c36f50e8-4632-44f0-83fe-e070fef28a10 |
| X-Api-Key | 注册时收到的密码 | X-Api-Key: htB9mR9DYgcu9bX_afHF62erXaH2TS7bg9KW3F7Z |
示例输入
json{ "subdomain": "8e5700ea-a4bf-41c7-8a77-e990661dcc6a", "txt": "___validation_token_received_from_the_ca___" }
响应
Status: 200 OK
json{ "txt": "___validation_token_received_from_the_ca___" }
该方法可用于检查服务器的就绪状态和/或存活状态。成功时返回状态码200,否则无法访问。
GET /health
建议运行自己的acme-dns实例,因为您实际上是授权acme-dns服务器代表您提供对CA挑战的应答,使该实例能够请求(并获得)指向它的CNAME域的TLS证书。
有关如何执行此操作的信息,请参见安装部分。
拉取最新的acme-dns Docker镜像:docker pull joohoi/acme-dns
创建目录:config用于配置文件,data用于sqlite3数据库
将https://raw.githubusercontent.com/joohoi/acme-dns/master/config.cfg%E5%A4%8D%E5%88%B6%E5%88%B0%60config/config.cfg%60
修改config.cfg以满足您的需求
运行Docker(假设配置文件中设置了port = "80"):
bashdocker run --rm --name acmedns \ -p 53:53 \ -p 53:53/udp \ -p 80:80 \ -v /path/to/your/config:/etc/acme-dns:ro \ -v /path/to/your/data:/var/lib/acme-dns \ -d joohoi/acme-dns
创建目录:config用于配置文件,data用于sqlite3数据库
将https://raw.githubusercontent.com/joohoi/acme-dns/master/config.cfg%E5%A4%8D%E5%88%B6%E5%88%B0%60config/config.cfg%60
复制项目的https://raw.githubusercontent.com/joohoi/acme-dns/master/docker-compose.yml%E6%88%96%E5%88%9B%E5%BB%BA%E6%82%A8%E8%87%AA%E5%B7%B1%E7%9A%84
编辑config/config.cfg和docker-compose.yml以满足您的需求,然后运行docker-compose up -d
注意:本文档中:
auth.example.org是acme-dns服务器的主机名*.auth.example.org记录198.51.100.1是运行acme-dns的系统的公共IP地址这些值应根据您的环境进行更改。
您需要在域名的常规DNS服务器上添加一些DNS记录:
auth.example.org的NS记录指向auth.example.org(这意味着auth.example.org负责所有*.auth.example.org记录)auth.example.org的A记录指向198.51.100.1AAAA记录_acme-challenge CNAME子域。您使用的客户端将说明如何执行此操作在用于实际查询之前,您可能需要测试acme-dns是否正常工作。
确认acme-dns子域的DNS查找按预期工作:dig auth.example.org
调用/register API端点注册测试域:
bash$ curl -X POST http://auth.example.org/register {"username":"eabcdb41-d89f-4580-826f-3e62e9755ef2","password":"pbAXVjlIOE01xbut7YnAbkhMQIkcwoHO0ek2j4Q0","fulldomain":"d420c923-bbd7-4056-ab64-c3ca54c9b3cf.auth.example.org","subdomain":"d420c923-bbd7-4056-ab64-c3ca54c9b3cf","allowfrom":[]}
/update API端点设置测试TXT记录。传递从上面执行的register调用收到的username、password和subdomain:bash$ curl -X POST \ -H "X-Api-User: eabcdb41-d89f-4580-826f-3e62e9755ef2" \ -H "X-Api-Key: pbAXVjlIOE01xbut7YnAbkhMQIkcwoHO0ek2j4Q0" \ -d '{"subdomain": "d420c923-bbd7-4056-ab64-c3ca54c9b3cf", "txt": "___validation_token_received_from_the_ca___"}' \ http://auth.example.org/update
注意:txt字段必须正好43个字符,否则acme-dns将拒绝它
bash$ dig -t txt @auth.example.org d420c923-bbd7-4056-ab64-c3ca54c9b3cf.auth.example.org
bash[general] # DNS接口。注意systemd-resolved可能在127.0.0.53上保留端口53 # 在这种情况下,acme-dns将出错,您需要定义监听接口 # 例如:listen = "127.0.0.1:53" listen = "127.0.0.1:53" # 协议,"both", "both4", "both6", "udp", "udp4", "udp6" 或 "tcp", "tcp4", "tcp6" protocol = "both" # 提供请求的域名 domain = "auth.example.org" # 区域名称服务器 nsname = "auth.example.org" # 管理员电子邮件地址,@替换为. nsadmin = "admin.example.org" # 除TXT外提供的预定义记录 records = [ # 指向acme-dns服务器公共IP的域 "auth.example.org. A 198.51.100.1", # 指定auth.example.org将解析任何*.auth.example.org记录 "auth.example.org. NS auth.example.org.", ] # CORS等的调试消息 debug = false [database] # 使用的数据库引擎,sqlite3或postgres engine = "sqlite3" # 连接字符串,sqlite3的文件名为postgres://$username:$password@$host/$db_name # 请注意,默认Docker镜像使用路径/var/lib/acme-dns/acme-dns.db作为sqlite3 connection = "/var/lib/acme-dns/acme-dns.db" # connection = "postgres://user:password@localhost/acmedns_db" [api] # 监听IP,例如127.0.0.1 ip = "0.0.0.0" # 禁用注册端点 disable_registration = false # 监听端口,例如443为默认HTTPS port = "443" # 可能的值:"letsencrypt", "letsencryptstaging", "cert", "none" tls = "letsencryptstaging" # 仅当tls = "cert"时使用 tls_cert_privkey = "/etc/tls/example.org/privkey.pem" tls_cert_fullchain = "/etc/tls/example.org/fullchain.pem" # 仅当tls = "letsencrypt"时使用 acme_cache_dir = "api-certs" # CORS AllowOrigins,可以使用通配符 corsorigins = [ "*" ] # 使用HTTP头获取客户端IP use_header = false # 用于提取IP地址/ IP地址列表的头名称 header_name = "X-Forwarded-For" [logconfig] # 日志级别:"error", "warning", "info" 或 "debug" loglevel = "debug" # 可能的值:stdout, TODO file & integrations logtype = "stdout" # 日志文件路径 TODO # logfile = "./acme-dns.log" # 格式,"json"或"text" logformat = "text"
RESTful acme-dns API可以通过两种方式通过HTTPS公开:
tls = "letsencrypt"并让acme-dns自动使用Let's Encrypt颁发自己的证书tls = "cert"并提供您自己的HTTPS证书链和私钥,通过tls_cert_fullchain和tls_cert_privkey在可能的情况下,推荐第一种选择。这是让acme-dns通过HTTPS公开其API的最简单和最安全的方式。
警告:如果您选择使用tls = "cert",则必须注意证书不会过期!如果过期,并且您用于颁发证书的ACME客户端依赖ACME DNS API来更新TXT记录,您将陷入API证书已过期但无法续订的困境,因为ACME客户端将拒绝连接到续订所需的ACME DNS API。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。




来自真实用户的反馈,见证轩辕镜像的优质服务