
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
tutum/haproxy是一个HAProxy镜像,能够在链接的容器之间实现负载均衡。如果在Tutum环境中启动,当链接的集群成员重新部署、加入或离开时,该镜像会自动重新配置自身。
| 标签 | 说明 |
|---|---|
| tutum/haproxy:latest | 对应GitHub的master分支 |
| tutum/haproxy:0.1 | 对应GitHub的0.1标签版本 |
注意:latest标签包含新功能,如虚拟主机、多SSL、多前端等;0.1标签是当前稳定版本,功能较少。
首先启动暴露80端口的应用容器:
bashdocker run -d --name web1 tutum/hello-world docker run -d --name web2 tutum/hello-world
然后运行tutum/haproxy并链接到目标容器:
bashdocker run -d -p 80:80 --link web1:web1 --link web2:web2 tutum/haproxy
此时,tutum/haproxy容器将在80端口监听请求,并使用roundrobin(轮询)算法将请求转发到web1和web2后端。
服务是一组具有相同功能的容器集合,通常使用相同参数创建的容器可视为一个服务。服务是负载均衡管理的理想概念,当服务扩缩容(改变容器数量)时,HAProxy会相应地平衡负载。
tutum/haproxy:在Tutum中设置链接时,会自动在服务之间建立链接,过程完全透明。tutum/haproxy:链接容器到tutum/haproxy时,链接别名至关重要。任何共享相同前缀且后跟“-/_”及整数的链接别名会被视为来自同一服务。例如:web-1和web-2属于服务web,app_1和app_2属于服务app,而app1和web2属于不同服务。此部分设置不可变,需重新部署HAProxy服务才能生效。
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| DEFAULT_SSL_CERT | 默认SSL证书,包含私钥和公证书的PEM文件,使用'\n'作为行分隔符 | |
| BALANCE | roundrobin | 负载均衡算法,可选值:roundrobin(轮询)、static-rr(静态轮询)、source(源IP)、leastconn(最少连接),详见https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-balance |
| MODE | http | HAProxy负载均衡模式,可选值:http、tcp、health |
| MAXCONN | 4096 | 设置每个进程的最大并发连接数 |
| OPTION | redispatch | 逗号分隔的HAProxy option条目,添加到default部分 |
| RSYSLOG_DESTINATION | 127.0.0.1 | HAProxy日志发送的rsyslog目标地址 |
| SSL_BIND_OPTIONS | no-sslv3 | SSL服务器使用的SSL绑定选项,设置HAProxy的ssl-default-bind-options配置,默认仅允许TLSv1.0+ |
| SSL_BIND_CIPHERS | SSL服务器使用的SSL密码套件,设置HAProxy的ssl-default-bind-ciphers配置 | |
| STATS_PORT | 1936 | HAProxy统计信息页面端口,若发布此端口,可通过http://<host-ip>:<STATS_PORT>/访问 |
| STATS_AUTH | stats:stats | 访问HAProxy统计信息所需的用户名和密码 |
| TIMEOUT | connect 5000, client 50000, server 50000 | 逗号分隔的HAProxy timeout条目,添加到default部分 |
| HEALTH_CHECK | check | 每个后端路由的健康检查设置,例如:"check inter 2000 rise 2 fall 3",详见https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#5.2-check |
此处设置可覆盖HAProxy的全局设置,仅适用于链接的服务。在Tutum环境中,当服务重新部署、加入或离开HAProxy服务时,HAProxy会自动更新以应用更改。
| 环境变量 | 描述 |
|---|---|
| APPSESSION | 粘性会话选项,例如:JSESSIONID len 52 timeout 3h,详见http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-appsession |
| COOKIE | 粘性会话选项,例如:SRV insert indirect nocache,详见http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-cookie |
| SSL_CERT | SSL证书,包含私钥和公证书的PEM文件,使用'\n'作为行分隔符 |
| DEFAULT_SSL_CERT | 与SSL_CERT类似,但将PEM文件存储为/certs/cert0.pem作为默认SSL证书。若在链接服务和HAProxy中指定多个DEFAULT_SSL_CERT,行为未定义 |
| EXCLUDE_PORTS | 逗号分隔的端口号(如3306, 3307),默认HAProxy会将应用服务暴露的所有端口添加到后端路由,可通过此参数排除不需要路由的端口(如数据库端口) |
| TCP_PORTS | 逗号分隔的端口(如9000, 9001, 2222/ssl),列在此处的端口将以TCP模式负载均衡,以/ssl结尾的端口表示需要SSL终止 |
| BALANCE | 负载均衡算法,同全局设置中的BALANCE |
| FORCE_SSL | 若设置(任意值)且启用SSL终止,HAProxy会将HTTP请求重定向到HTTPS |
| VIRTUAL_HOST | 指定虚拟主机和虚拟路径,格式:[scheme://]domain[:port][/path], ...,*可作为通配符用于domain和path部分 |
| HEALTH_CHECK | 每个后端路由的健康检查设置,同全局设置中的HEALTH_CHECK |
| HTTP_CHECK | 启用HTTP协议检查服务器健康状态,例如:"OPTIONS * HTTP/1.1\r\nHost:\ www",详见https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-option%20httpchk |
| VIRTUAL_HOST_WEIGHT | 虚拟主机权重整数,与VIRTUAL_HOST配合使用,默认0,影响虚拟主机ACL规则的优先级,权重越高优先级越高 |
| HSTS_MAX_AGE | 启用HSTS,整数表示HSTS的最大存活时间(秒),例如:31536000 |
| GZIP_COMPRESSION_TYPE | 启用gzip压缩,值为要压缩的MIME类型列表,例如:text/html text/plain text/css |
更多信息请参考http://cbonte.github.io/haproxy-dconv/configuration-1.5.html%E3%80%82
虚拟主机和虚拟路径可通过环境变量VIRTUAL_HOST指定,其值为逗号分隔的URL列表,格式为[scheme://]domain[:port][/path]。
| 项 | 默认值 | 描述 |
|---|---|---|
| scheme | http | 可选值:http、https、wss |
| domain | 虚拟主机,*可作为通配符 | |
| port | 80/443 | 虚拟主机端口,当scheme为https或wss时,默认端口为443 |
| /path | 虚拟路径,以/开头,*可作为通配符 |
| 虚拟主机 | 匹配 | 不匹配 |
|---|---|---|
| [***] | example.com | [***] |
| example.com | example.com | [***] |
| example.com:90 | example.com:90 | example.com |
| [***] | [***] | example.com |
| [***] | [***] | [***] |
| *.example.com | [***] | example.com |
| *example.com | [***] example.com | [***] |
| [***] | [] [] | [***] |
| [***] | [] [] | example.com |
| * | 任何HTTP网站 | |
| [***] | 任何HTTPS网站 | |
| */path | example.com/path | example.com/path/ |
| */path/ | example.com/path/ | example.com/path |
| /path/ | example.com/path/abc | example.com/abc/path/ |
| /.js | example.com/abc.js | example.com/abc.css |
注意:基于VIRTUAL_HOST生成的ACL规则顺序是随机的。在HAProxy中,若宽范围规则(如*.example.com)排在窄范围规则(如web.example.com)之前,窄范围规则将永远不会生效。因此,若虚拟主机存在范围重叠,需使用VIRTUAL_HOST_WEIGHT手动设置ACL规则顺序,即给窄范围虚拟主机设置更高权重。
tutum/haproxy支持多证书SSL终止。对于需要SSL终止的应用,只需设置SSL_CERT和VIRTUAL_HOST,HAProxy会从链接环境中读取证书并配置SSL终止。
注意:若环境变量值包含“=”(SSL证书中常见),Docker 1.7.0以下版本会跳过该环境变量,因此多SSL终止仅在Docker 1.7.0+或Tutum环境中可用。
VIRTUAL_HOST未设置,或设置为“https” schemetutum/haproxy中设置DEFAULT_SSL_CERTSSL_CERT和/或DEFAULT_SSL_CERTSSL_CERT和DEFAULT_SSL_CERT的区别:SSL_CERT指定的多个证书存储为cert1.pem、cert2.pem等,而DEFAULT_SSL_CERT指定的证书始终存储为cert0.pem。HAProxy在无SNI匹配时使用cert0.pem作为默认证书。若提供多个DEFAULT_SSL_CERT,仅一个会存储为cert0.pem,其余会被丢弃。
证书是包含私钥(在前)和公证书(在后)的PEM文件,可通过以下脚本生成:
bashopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out ca.pem -days 1080 -nodes -subj '/CN=*/O=My Company Name LTD./C=US' cp key.pem cert.pem cat ca.pem >> cert.pem
生成后,使用以下命令获取证书文本:
bashawk 1 ORS='\\n' cert.pem
将输出复制并设置为SSL_CERT或DEFAULT_SSL_CERT的值。
有三种设置亲和性和粘性会话的方法:
BALANCE=source:HAProxy会对客户端IP地址进行哈希,确保同一IP始终定向到同一服务器。APPSESSION=<value>:使用应用会话确定客户端连接的服务器,例如:JSESSIONID len 52 timeout 3h。COOKIE=<value>:使用应用Cookie确定客户端连接的服务器,例如:SRV insert indirect nocache。更多信息请参考http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-appsession%E5%92%8Chttp://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-cookie%E3%80%82
默认情况下,tutum/haproxy运行在http模式。若要链接的服务运行在tcp模式,可指定环境变量TCP_PORTS(逗号分隔的端口,如9000, 9001)。
bashdocker run --name app-1 --expose 9000 --expose 9001 -e TCP_PORTS="9000,9001" your_app docker run --name app-2 --expose 9000 --expose 9001 -e TCP_PORTS="9000,9001" your_app docker run --link app-1:app-1 --link app-2:app-2 -p 9000:9000 -p 9001:9001 tutum/haproxy
此时,HAProxy会在9000和9001端口分别对app-1和app-2进行TCP模式负载均衡。
bashdocker run --name app-1 --expose 80 --expose 22 -e TCP_PORTS=22 your_app docker run --name app-2 --expose 80 --expose 22 -e TCP_PORTS=22 your_app docker run --link app-1:app-1 --link app-2:app-2 -p 80:80 -p 22:22 tutum/haproxy
此时,HAProxy在80端口使用HTTP模式,在22端口使用TCP模式进行负载均衡。
在TCP_PORTS中,以/ssl结尾的端口(如2222/ssl)会启用SSL终止。
注意:
VIRTUAL_HOST和TCP_PORTS,以更好地控制HTTP模式。TCP_PORTS,tutum/haproxy会将它们视为同一服务。有两种启用WebSocket支持的方法:
ws或wss scheme,例如:-e VIRTUAL_HOST="ws://ws.example.com, wss://wss.example.com"通过Tutum启动要负载均衡的服务,然后启动负载均衡器:
tutum/haproxytutumcli或stackfile,请将role设置为globalHAProxy会自动查询Tutum API获取服务容器的更新列表并重新配置,包括:
bashdocker run -d --link webapp:webapp -p 80:80 tutum/haproxy
bashdocker run -d --link webapp:webapp -e EXCLUDE_PORTS=8083,8086 -p 80:80 tutum/haproxy
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 tutum/haproxy 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: