docker - 在 docker 上本地运行 HAProxy 的问题

标签 docker haproxy

我有一个在 Docker 端口 3001 上本地运行 HAProxy 2.0 版的容器。
配置文件是:

global  
        debug  

defaults  
        log global  
        mode    http  
        timeout connect 50000
        timeout client 50000  
        timeout server 50000  

frontend main  
        bind *:3000
        default_backend app  

backend app  
        balance leastconn
        mode http  
        server dummy <localhostIP>:80

Docker文件是:
FROM haproxy:2.0
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

Docker 运行命令:
docker run -p3001 --name my-running-haproxy my-haproxy

我正在向端口 3000 发出 postman GET 并期望 HaProxy 重定向到本地端口 80 上的“虚拟”服务器。但我无法得到任何清晰的响应。感谢任何输入。

最佳答案

如果您像以前一样运行容器,Docker 将在您的本地主机上分配一个随机端口并将流量路由到端口 3001。您可以通过运行 docker ps 检查哪个端口在您启动容器并查看 PORTS 之后部分:

CONTAINER ID        IMAGE               COMMAND                   CREATED           STATUS              PORTS                      NAMES
6b502af649be        my-haproxy           "/docker-entrypoint.…"   1 minute ago      Up 47 minutes       0.0.0.0:32769->3001/tcp    upbeat_shtern

因此,在我的示例中,您可以在端口 32769 上访问您的应用程序,但这个数字是随机的。

请记住,在您的示例中,Docker 将流量路由到端口 3001,而您将 HAProxy 配置为绑定(bind)到端口 3000。您至少需要更改 docker run命令如下:
docker run -p3000 --name my-running-haproxy my-haproxy

但通常您希望在 localhost 上有一个固定端口,例如端口 80。像这样启动你的容器来实现:
docker run -p 80:3000 --name my-running-haproxy my-haproxy

现在您可以通过 localhost:80 访问您的应用程序.

关于docker - 在 docker 上本地运行 HAProxy 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60172131/

相关文章:

http - HTTP header 中的额外空间会在 HAProxy 上产生 400 错误

version - 我的HAProxy版本是什么?

docker - 动态获取 docker-compose 创建的正在运行的容器名称

java - 为什么java Native Memory Tracking中的内部内存在增加

nginx - HAProxy 与 Nginx

dockerized HAProxy+Keepalived 实现 HA

apache - 如何在 Apache 2.4.1 中与 Haproxy 一起使用 mod_deflate?

tomcat - 无法从浏览器访问 Docker tomcat

postgresql - 通过 Jira 容器连接到 Postgres 容器

windows - boot2docker 启动脚本与主机挂载本地共享文件夹