如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
HAProxy-SRV是一个模板解决方案,能够基于DNS(如SkyDNS或Mesos-DNS)的SRV记录定期轮询服务数据,灵活地重新配置HAProxy。它也支持Round-Robin DNS A记录,如Docker Swarm模式。
其逻辑非常简单:HAProxy基于Handlebars模板进行配置,每当检测到DNS变化时,模板会重新评估。脚本通过轮询DNS,在检测到变化后触发HAProxy配置刷新。
由德国elastic.io开发。
使用Docker启动的最简单方式:
bashdocker run -d -p 8080:8080 -p 80:80 -v $PWD/haproxy.cfg.template:/src/haproxy.cfg.template elasticio/haproxy-srv:latest
如需查看更多DEBUG输出,添加环境变量:-e "DEBUG=*"
脚本工作流程如下:Docker容器启动后,脚本解析并验证模板,在/src/haproxy.cfg创建HAProxy配置文件并以守护进程模式启动HAProxy。默认情况下,脚本每秒(可通过REFRESH_TIMEOUT环境变量配置,默认1000毫秒)执行一次DNS查询并重新评估模板。如果评估结果与原始配置不同,原始配置将被覆盖并触发HAProxy重载,此过程不会影响现有连接。
推荐通过https://hub.docker.com/r/elasticio/haproxy-srv/%E9%83%A8%E7%BD%B2%E3%80%82%E9%9C%80%E6%94%BE%E7%BD%AE%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A8%A1%E6%9D%BF%EF%BC%8C%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%B9%E5%BC%8F%E6%98%AF%E5%9F%BA%E4%BA%8E%60haproxy-srv%60%E9%95%9C%E5%83%8F%E6%9E%84%E5%BB%BA%E6%96%B0%E9%95%9C%E5%83%8F%E3%80%82
dockerfileFROM elasticio/haproxy-srv:latest COPY haproxy.cfg.template /src/ EXPOSE 80 8880
注意EXPOSE部分,若HAProxy配置监听的端口不同于80,需指定暴露的端口。
模板文件需放置在最终Docker容器的/src/haproxy.cfg.template路径,使用Handlebars语法,并包含一个必要扩展(见下文)。示例如下:
hbsglobal user root group root # 模块工作所需的统计配置 # https://github.com/observing/haproxy#haproxycfg stats socket /tmp/haproxy.sock level admin defaults mode http timeout connect 5000 timeout client 50000 timeout server 50000 {{#dns-srv "_frontend._tcp.marathon.mesos"}} frontend sample bind 0.0.0.0:80 balance roundrobin option http-server-close option forwardfor {{#each this}} server frontend-{{@index}} {{ip}}:{{port}} check weight {{weight}} {{/each}} {{/dns-srv}} # 标准DNS轮询 {{#dns-a "cluster.example.com"}} frontend sample2 bind 0.0.0.0:8080 {{#each this}} server {{name}} {{ip}}:80 check {{/each}} {{/dns-a}} # Docker Swarm模式示例 {{#dns-a "tasks.myservice"}} frontend sample3 bind 0.0.0.0:8081 {{#each this}} server {{name}} {{ip}}:80 check {{/each}} {{/dns-a}}
任何有效的HAProxy配置都需包含以下必要配置:
stats socket /tmp/haproxy.sock level admin
脚本通过socket /tmp/haproxy.sock与HAProxy守护进程通信以触发重启。
配置模板是标准的Handlebars模板,可使用该模板语言的所有功能。此外,实现了一个额外的dns-srv助手,该助手接受一个字符串参数,执行DNS SRV查找以获取SRV记录。SRV记录查找后,会对每条SRV记录进行DNS解析以获取IP。
以下模板示例展示其用法:
hbs# 常规配置部分 {{#dns-srv "_frontend._tcp.marathon.mesos"}} # 仅当在DNS中找到_frontend._tcp.marathon.mesos时才渲染此块 {{#each this}} # 对每条DNS SRV记录渲染此部分 SRV名称:{{name}} SRV权重:{{weight}} SRV端口:{{port}} SRV名称对应的IP:{{ip}} {{/each}} {{/dns-srv}} # 其余配置部分
上述示例展示了Mesos-DNS的典型使用场景。
bash$ docker network create -d overlay --subnet 10.1.1.0/24 my_net $ docker service create --replicas 2 --name my_web --network my_net nginx
默认情况下,服务创建时使用--endpoint-mode vip。若使用VIP模式,轮询DNS名称为tasks.my_web;若使用--endpoint-mode dnsrr,则my_web DNS名称可在HAProxy dns-a模板中使用。
按照使用方法部分创建包含自定义haproxy.cfg.template的代理镜像。dns-a部分配置如下:
hbs{{#dns-a "tasks.my_web"}} # 其他配置 backend my_web {{#each this}} server {{name}} {{ip}}:80 check {{/each}} {{/dns-a}}
bash$ mkdir my_proxy ; cd my_proxy # 创建Dockerfile $ docker build -t my_proxy_image .
启动代理服务,将80端口映射到每个Docker主机节点的唯一端口:
bash$ docker service create --name my_proxy --network my_net -p 8081:80 my_proxy_image
也可通过其他方式将haproxy.cfg.template共享并绑定到elasticio/haproxy-srv镜像中。
设置环境变量DEBUG=*以查看详细日志。
欢迎提交PR,包括:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

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