Podman环境下HAProxy容器无法连接后端服务器,报‘backend 'servers' has no server available!’错误求助
Podman环境下HAProxy容器无法连接后端服务器,报‘backend 'servers' has no server available!’错误求助
各位大佬好,遇到一个棘手的问题想请教:
TL;DR:我的容器环境在Docker下完全正常,之前用Podman也没问题,但现在切换回Podman后,HAProxy容器突然无法连接到后端的应用容器,报backend 'servers' has no server available!错误。本来以为Podman是Docker的兼容替代,现在这个情况实在搞不懂。
问题详细描述
我用HAProxy作为容器化环境的负载均衡器,HAProxy容器负责把流量转发到另一个独立的应用容器。这套配置正常运行了两周多,没有做任何改动的情况下,突然HAProxy就无法访问后端服务器了。
相关配置信息
HAProxy配置文件(haproxy.cfg)
global user haproxy group haproxy stats socket /var/run/haproxy.sock mode 660 level admin expose-fd listeners daemon defaults timeout connect 10s timeout client 40s timeout tarpit 1m timeout server 120s frontend app mode http bind *:80 default_backend servers backend servers mode http balance leastconn server app-001 app-001:5000 check listen stats bind *:9999 mode http stats enable stats uri /stats stats hide-version
容器启动命令
# 启动应用容器 podman run -d --rm --name app-001 --network my-network -v /path/dst/data:/data app-image # 启动HAProxy容器 podman run -d --name haproxy-container --network my-network -p 80:80 -p 9999:9999 -v /path/dst/haproxy:/usr/local/etc/haproxy haproxy-image
容器镜像Dockerfile
- HAProxy镜像Dockerfile
FROM docker.io/haproxytech/haproxy-alpine:latest RUN touch /var/run/haproxy.sock && apk add socat && apk add curl
- 应用镜像Dockerfile
FROM alpine RUN apk update && apk add python3 && python -m ensurepip --upgrade && pip3 install Flask Flask_RESTful && mkdir data COPY test_app.py . CMD ["python","-m","test_app"]
测试应用代码(test_app.py)
from flask import Flask from flask_restful import Resource, Api from pathlib import Path app = Flask(__name__) api = Api(app) data_path = Path.cwd() / 'data' class Endpoint(Resource): def get(self): return list(map(lambda f: str(f.name), data_path.iterdir())) api.add_resource(Endpoint, '/') if __name__ == '__main__': app.run(host='0.0.0.0')
HAProxy容器日志输出
[NOTICE] (1): New worker (3) forked [NOTICE] (1): Loading success. [WARNING] (3): Server servers/app-001 is DOWN, reason: Layer4 timeout, check duration: 2003ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue. [ALERT] (3): backend 'servers' has no server available!'
已尝试的排查步骤
- 确认后端应用容器
app-001单独运行时完全正常,能正常访问 - 检查两个容器的网络配置,确认都在同一个Podman网络
my-network下 - 进入HAProxy容器尝试ping应用容器的IP,结果100%丢包
- 反复检查haproxy.cfg配置,没有发现错误
- 完全卸载重装Podman,问题依旧
- 在另一台同版本(22.04)的机器上复现最小案例,还是出现同样问题
- 换成Docker执行所有命令,一切正常,没有任何问题
最小复现步骤
当前目录结构:
dst/ ├── Containerfiles/ │ ├── AppContainerfile │ └── HAProxyContainerfile ├── data/ ├── haproxy/ │ ├── haproxy.cfg │ └── haproxy.sock └── test_app.py
执行以下命令:
# 构建镜像 podman build -f Containerfiles/AppContainerfile -t app-image . podman build -f Containerfiles/HaproxyContainerfile -t haproxy-image . # 创建网络 podman network create my-network # 启动容器 podman run -d --rm --name app-001 --network my-network -v /path/dst/data:/data app-image podman run -d --name haproxy-container --network my-network -p 80:80 -p 9999:9999 -v /path/dst/haproxy:/usr/local/etc/haproxy haproxy-image
之前用Podman时这套流程完全正常,能通过80端口访问应用,HAProxy的9999/stats页面也能看到后端服务器是正常状态,但现在完全不行了。我怀疑问题可能出在Podman拉取docker.io/haproxytech/haproxy-alpine:latest这个基础镜像的方式上,但不确定具体原因。
希望各位大佬能帮忙分析下问题所在,以及怎么解决这个问题,非常感谢!
备注:内容来源于stack exchange,提问作者vshas
相关产品推荐
相关产品推荐

