
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
很遗憾,该项目目前处于维护模式。请不要提交任何新功能的PR。我们仍会修复发现的bug。
这是一个HAProxy镜像,可在链接的容器之间进行负载均衡;如果在Docker Cloud或使用Docker Compose v2启动,当链接的集群成员重新部署、加入或离开时,它会自动重新配置。
可用版本请参见:https://hub.docker.com/r/dockercloud/haproxy/tags/
latest:基于master分支构建staging:基于staging分支构建x.x.x:基于GitHub上的git标签构建注意:请始终使用适合您的特定镜像标签。除测试目的外,不要在任何情况下使用dockercloud/haproxy:latest。
您可以通过以下四种方式使用dockercloud/haproxy:
使用Docker Cloud启动您想要负载均衡的服务。
启动负载均衡器。为此,选择"Jumpstarts"、"Proxies"并选择dockercloud/haproxy。在向导的"环境变量"步骤中,链接到之前创建的服务(链接名称不重要),并添加"Full Access" API角色(这将允许HAProxy通过查询Docker Cloud的API动态更新)。
注意:
docker-cloud cli或stackfile,请将roles设置为globalsequential_deployment: true完成后,haproxy容器将开始查询Docker Cloud的API以获取服务中容器的更新列表,并自动重新配置,包括:
Docker Cloud中的stackfile示例:
yamlweb: image: 'dockercloud/hello-world:latest' target_num_containers: 2 lb: image: 'dockercloud/haproxy:latest' links: - web ports: - '80:80' roles: - global
Docker 1.12原生支持SwarmMode。dockercloud/haproxy将自动配置以负载均衡同一网络上运行的所有服务:
使用docker network create -d overlay <name>命令创建新网络
在管理节点上的该网络上启动dockercloud/haproxy服务。
在同一网络上启动需要负载均衡的应用服务。
注意
SERVICE_PORTS=<port1>,<port2>,这些是您想要公开的端口。dockercloud/haproxy服务:
如果挂载/var/run/docker.sock,则只能在swarm管理节点上运行。
如果希望haproxy服务在工作节点上运行,需要设置指向管理节点地址的DOCKER_HOST环境变量。Docker Swarm模式支持示例
bashdocker network create -d overlay proxy docker service create --name haproxy --network proxy --mount target=/var/run/docker.sock,source=/var/run/docker.sock,type=bind -p 80:80 --constraint "node.role == manager" dockercloud/haproxy docker service create -e SERVICE_PORTS="80" --name app --network proxy --constraint "node.role != manager" dockercloud/hello-world docker service scale app=2 docker service update --env-add VIRTUAL_HOST=web.org app
传统链接指的是docker 1.10之前创建的链接,以及docker 1.10或之后在默认桥接网络中创建的链接。
使用docker cli的传统链接示例
bashdocker run -d --name web1 dockercloud/hello-world docker run -d --name web2 dockercloud/hello-world docker run -d -p 80:80 --link web1:web1 --link web2:web2 dockercloud/haproxy
docker-compose.yml v1格式示例:
yamlweb1: image: 'dockercloud/hello-world:latest' web2: image: 'dockercloud/hello-world:latest' lb: image: 'dockercloud/haproxy:latest' links: - web1 - web2 ports: - '80:80'
注意:任何共享相同前缀并后跟"-/_"和整数的链接别名都被视为来自同一服务。例如:web-1和web-2属于服务web,app_1和app_2来自服务app,但app1和web2来自不同服务。
Docker Compose 1.6支持新的compose文件格式。在新版本(v2)中,注入环境变量的旧链接已被弃用。
与使用传统链接类似,以下是需要注意的差异:
dockercloud/haproxy容器中覆盖HOSTNAME环境变量。container_name更改为非标准名称。否则,该服务将被忽略。在Linux或Docker for Mac (beta)上运行的docker-compose.yml示例:
yamlversion: '2' services: web: image: dockercloud/hello-world lb: image: dockercloud/haproxy links: - web volumes: - /var/run/docker.sock:/var/run/docker.sock ports: - 80:80
在Mac OS上运行的docker-compose.yml示例:
yamlversion: '2' services: web: image: dockercloud/hello-world lb: image: dockercloud/haproxy links: - web environment: - DOCKER_TLS_VERIFY - DOCKER_HOST - DOCKER_CERT_PATH volumes: - $DOCKER_CERT_PATH:$DOCKER_CERT_PATH ports: - 80:80
堆栈启动后,可以使用docker-compose scale web=3扩展web服务。dockercloud/haproxy将自动重新加载其配置。
使用Docker Compose v2和Swarm(使用环境变量)
当使用上一节中的链接时,Docker Swarm调度程序可能过于严格。 即使使用覆盖网络,swarm(截至1.1.0)也会尝试将haproxy调度到与链接服务相同的节点,这是由于传统链接行为。 这可能导致不需要的调度模式或错误,例如"无法找到满足所有依赖关系的节点..."
由于Compose V2允许通过服务名称进行发现,Dockercloud haproxy只需要链接来识别需要负载均衡的服务。
第二种选择是使用ADDITIONAL_SERVICES变量来识别服务。
ADDITIONAL_SERVICES环境变量设置为链接的服务。DEBUG环境变量。overlay网络。在linux上"project_dir"目录中运行的docker-compose.yml示例:
yamlversion: '2' services: web: image: dockercloud/hello-world blog: image: dockercloud/hello-world lb: image: dockercloud/haproxy depends_on: - web - blog environment: - ADDITIONAL_SERVICES=project_dir:web,project_dir:blog volumes: - /var/run/docker.sock:/var/run/docker.sock ports: - 80:80
此部分的设置是不可变的,必须重新部署HAProxy服务才能使更改生效
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| ADDITIONAL_BACKEND_<NAME> | 添加名称为<NAME>的附加后端。可能的值包括:balance source, server 127.0.0.1:8080 | |
| ADDITIONAL_BACKEND_FILE_<NAME> | 添加名称为<NAME>的附加后端,其值为指定文件的内容。 | |
| ADDITIONAL_SERVICES | 要平衡的附加服务列表(例如:prj1:web,prj2:sql)。发现将基于`com.docker.compose.[project | |
| BALANCE | roundrobin | 使用的负载均衡算法。可能的值包括:roundrobin(轮询)、static-rr(静态轮询)、source(源地址)、leastconn(最少连接)。参见:https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-balance |
| CA_CERT_FILE | ca-cert文件的路径。允许直接从卷挂载ca-cert文件,而不是从环境变量。如果设置,CA_CERT环境变量将被忽略。可能的值:/cacerts/cert0.pem | |
| CA_CERT | HAProxy用于验证客户端的CA证书。使用与DEFAULT_SSL_CERT相同的格式 | |
| CERT_FOLDER | 证书的路径。允许直接从卷挂载证书文件,而不是从环境变量。如果设置,DEFAULT_SSL_CERT和链接服务的SSL_CERT将被忽略。可能的值:/certs/ | |
| DEFAULT_SSL_CERT | 默认SSL证书,一个PEM文件内容,包含私钥后跟公证书,使用'\n'(两个字符)作为行分隔符。应格式化为一行 - 参见SSL终止 | |
| EXTRA_BIND_SETTINGS | 额外设置的逗号分隔字符串(<port>:<setting>),每个部分将附加到配置文件中的相关端口绑定部分。要转义逗号,请使用\,。可能的值:443:accept-proxy, 80:name http | |
| EXTRA_DEFAULT_SETTINGS | 额外设置的逗号分隔字符串,每个部分将附加到配置文件的DEFAULT部分。要转义逗号,请使用\, | |
| EXTRA_DEFAULT_SETTINGS_FILE | 其内容将包含在配置文件的DEFAULT部分中的文件。 | |
| EXTRA_FRONTEND_SETTINGS_<PORT> | 额外设置的逗号分隔字符串,每个部分将附加到名称中指定端口号的frontend部分。要转义逗号,请使用\,。例如:EXTRA_FRONTEND_SETTINGS_80=balance source, maxconn 2000 | |
| EXTRA_FRONTEND_SETTINGS_FILE_<PORT> | 其内容将附加到名称中指定端口号的frontend部分的文件。 | |
| EXTRA_GLOBAL_SETTINGS | 额外设置的逗号分隔字符串,每个部分将附加到配置文件的GLOBAL部分。要转义逗号,请使用\,。可能的值:tune.ssl.cachesize 20000, tune.ssl.default-dh-param 2048 | |
| EXTRA_GLOBAL_SETTINGS_FILE | 其内容将包含在配置文件的GLOBAL部分中的文件。 | |
| EXTRA_ROUTE_SETTINGS | 附加到每个后端路由健康检查后的字符串,可以在链接服务中覆盖。可能的值:"send-proxy" | |
| EXTRA_SSL_CERTS | 额外证书名称的逗号分隔列表,例如CERT1, CERT2, CERT3。还需要将每个证书指定为单独的环境变量,如:CERT1="<cert-body1>"、CERT2="<cert-body2>"、CERT3="<cert-body3>" | |
| FORCE_DEFAULT_BACKEND | True | 将default_service设置为默认后端。当有多个后端且不希望default_service作为默认后端时很有用 |
| HEALTH_CHECK | check | 为每个后端路由设置健康检查,可能的值:"check inter 2000 rise 2 fall 3"(每2000毫秒检查一次,成功2次后上线,失败3次后下线)。参见:https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#5.2-check |
| HTTP_BASIC_AUTH | HTTP基本认证的凭据(<user>:<pass>)逗号分隔列表,适用于所有后端路由。要转义逗号,请使用\,。注意:不要在生产环境中依赖此进行身份验证 | |
| HTTP_BASIC_AUTH_SECURE | HTTP基本认证的加密凭据(<user>:<encrypted-pass>)逗号分隔列表,适用于所有后端路由。要转义逗号,请使用\,。参见:https://cbonte.github.io/haproxy-dconv/1.5/configuration.html#3.4-user 注意:不要在生产环境中依赖此进行身份验证 | |
| MAXCONN | 4096 | 设置每个进程的最大并发连接数。 |
| MODE | http | HAProxy的负载均衡模式。可能的值包括:http(HTTP模式)、tcp(TCP模式)、health(健康检查模式) |
| MONITOR_PORT | 应添加monitor_uri的端口号。与MONITOR_URI一起使用。可能的值:80 | |
| MONITOR_URI | 用于拦截并返回HAProxy健康状态而不是转发请求的确切URI。参见:http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-monitor-uri%E3%80%82%E5%8F%AF%E8%83%BD%E7%9A%84%E5%80%BC%EF%BC%9A%60/ping%60 | |
| OPTION | redispatch | 添加到default部分的HAProxy option条目逗号分隔列表。 |
| RELOAD_TIMEOUT | 0 | 当haproxy重新配置时,新进程启动并附加到TCP套接字以处理新连接,旧进程处理现有连接。此超时指定旧进程允许继续运行的时间,之后将被终止。-1:立即终止旧进程0:无超时,旧进程将运行到TCP连接结束。由于启用了http-keep-alives,TCP连接可能保持打开状态很长时间。>0:超时(秒),之后进程将被终止。 |
| RSYSLOG_DESTINATION | 127.0.0.1 | HAProxy日志发送到的rsyslog目标 |
| SKIP_FORWARDED_PROTO | 如果设置为任何值,HAProxy将不添加X-Forwarded-头。可用于将HAProxy与另一个负载均衡器结合使用时 | |
| SSL_BIND_CIPHERS | 显式设置SSL服务器使用的SSL密码。这设置HAProxy ssl-default-bind-ciphers配置。 | |
| SSL_BIND_OPTIONS | no-sslv3 | 显式设置SSL服务器使用的SSL绑定选项。这设置HAProxy ssl-default-bind-options配置。默认仅允许在SSL服务器上使用TLSv1.0+。 |
| STATS_AUTH | stats:stats | 访问HAProxy统计信息所需的用户名和密码。 |
| STATS_PORT | 1936 | HAProxy统计信息部分的端口。如果发布此端口,可通过http://<host-ip>:<STATS_PORT>/访问统计信息 |
| TIMEOUT | connect 5000, client 50000, server 50000 | 添加到default部分的HAProxy timeout条目逗号分隔列表。 |
| NBPROC | 1 | 设置global部分的nbproc条目。默认情况下,只创建一个进程,这是推荐的操作模式。 |
| HAPROXY_USER | haproxy | 将UNIX套接字的用户设置为指定的系统用户名 |
| HAPROXY_GROUP | haproxy | 将UNIX套接字的组设置为指定的 |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 dockercloud/haproxy 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: