
byjg/easy-haproxy该Docker镜像可基于Docker容器标签或YAML文件动态生成haproxy.cfg,实现HAProxy的自动化配置。
适用于需要快速部署和动态管理HAProxy的场景,尤其适合Docker或Swarm环境中多容器服务的负载均衡配置,也支持静态YAML配置的使用场景。
Easy HAProxy会根据容器标签或提供的YAML文件自动创建haproxy.cfg。基本运行命令如下:
bashdocker run -d \ --name easy-haproxy-container \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DISCOVER="swarm|docker|static" \ # + 环境变量 \ # + 映射到主机的端口 \ byjg/easy-haproxy
说明:
/var/run/docker.sock以发现Docker容器并获取标签;| 环境变量 | 描述 |
|---|---|
| DISCOVER | haproxy.cfg的生成方式:static(静态YAML)、docker(Docker标签)或swarm(Swarm标签) |
| HAPROXY_USERNAME | (可选)统计页面用户名,默认:admin |
| HAPROXY_PASSWORD | 统计页面密码,未设置则禁用统计功能 |
| HAPROXY_STATS_PORT | (可选)统计页面端口,默认:1936 |
| HAPROXY_CUSTOMERRORS | (可选)是否使用自定义HTML错误页面,true/false,默认:false |
docker模式适用于常规Docker环境,通过容器标签自动发现并配置HAProxy。要求Easy HAProxy与目标容器处于同一Docker网络,配置每1分钟自动更新。
网络创建示例:
bashdocker create network easyhaproxy docker run --network easyhaproxy byjg/easy-haproxy docker run --network easyhaproxy myimage # 目标容器需加入同一网络
swarm模式适用于Docker Swarm集群,通过服务部署标签(deploy层级)自动发现配置,配置每1分钟自动更新。要求Easy HAProxy与目标服务处于同一网络。
Stack部署标签示例:
yamlservices: foo: deploy: labels: com.byjg.easyhaproxy.definitions: "http,https" # 其他标签参数...
| 标签格式 | 描述 |
|---|---|
| com.byjg.easyhaproxy.definitions | 逗号分隔的配置定义列表,每个定义需对应以下参数标签 |
| com.byjg.easyhaproxy.port.[definition] | (可选)HAProxy监听端口,默认:80 |
| com.byjg.easyhaproxy.localport.[definition] | (可选)容器监听端口,默认:80 |
| com.byjg.easyhaproxy.host.[definition] | HAProxy监听的主机名 |
| com.byjg.easyhaproxy.redirect.[definition] | (可选)基于上述端口的主机重定向规则 |
| com.byjg.easyhaproxy.sslcert.[definition] | (可选)Base64编码的PEM格式SSL证书 |
单一定义示例:
bashdocker run \ -l com.byjg.easyhaproxy.definitions=http \ -l com.byjg.easyhaproxy.port.http=80 \ -l com.byjg.easyhaproxy.host.http=byjg.com.br \ myimage
多定义示例:
bashdocker run \ -l com.byjg.easyhaproxy.definitions=express,admin \ # express定义 -l com.byjg.easyhaproxy.port.express=80 \ -l com.byjg.easyhaproxy.localport.express=3000 \ -l com.byjg.easyhaproxy.host.express=express.byjg.com.br \ # admin定义 -l com.byjg.easyhaproxy.port.admin=80 \ -l com.byjg.easyhaproxy.localport.admin=3001 \ -l com.byjg.easyhaproxy.host.admin=admin.byjg.com.br \ myimage
重定向示例:
bashdocker run \ -l com.byjg.easyhaproxy.redirect.http=[***][***] \ myimage
static模式通过YAML文件静态配置HAProxy,需将YAML文件挂载至容器内/etc/haproxy/easyconfig.yml。
YAML配置示例:
yamlstats: username: admin password: password port: 1936 # 可选,默认1936 customerrors: true # 可选,默认false easymapping: - port: 80 hosts: host1.com.br: container:5000 host2.com.br: other:3000 redirect: [***] [***] - port: 443 ssl_cert: BASE64_PEM_CERTIFICATE # Base64编码的PEM证书 hosts: host1.com.br: container:80 - port: 8080 hosts: host3.com.br: domain:8181
运行命令:
bashdocker run -v /path/to/easyconfig.yml:/etc/haproxy/easyconfig.yml byjg/easy-haproxy
将包含HAProxy配置文件(.cfg)的目录挂载至/etc/haproxy/conf.d,文件内容将被合并到最终的haproxy.cfg中。
bashdocker run \ -v /your/local/conf.d:/etc/haproxy/conf.d \ byjg/easy-haproxy
创建PEM文件:合并证书和私钥为单个PEM文件
bashcat example.com.crt example.com.key > single.pem
转换为Base64编码(单行):
bashcat single.pem | base64 -w0
配置标签:将Base64字符串设置为com.byjg.easyhaproxy.sslcert.[definition]标签的值
启用HAPROXY_CUSTOMERRORS=true后,挂载目录/etc/haproxy/errors-custom/至容器,放入命名为ERROR_NUMBER.http的文件(如503.http),其中ERROR_NUMBER为HTTP错误码。
bashdocker build -t byjg/easy-haproxy .

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务