【发布时间】:2016-01-26 14:38:37
【问题描述】:
我正在为我的本地开发环境使用 Docker。我现在的设置是 5 个容器(1 HaProxy + 2 NGINX + 2 PHP7-FPM)。
代理容器用于根据 url 引导请求,因此如果我输入 http://project1.dev,它将代理请求到使用 project1-php 评估 php 的 project1-nginx。 http://project2.dev 的设置类似。
现在,我正试图围绕两个 php 容器的端口展开思考。默认的 fpm 端口是 9000,所以两个 php 容器都不能在这个端口上运行。我假设这里的方法是让两个容器都导出端口 9000,但在主机上将它们设为 9000 和 9001?
在我的 compose 文件中包含这些内容。
project_1_php:
ports:
- "9000:9000"
project_2_php:
ports:
- "9001:9000"
所以,一切正常启动,项目 1 正在运行,但项目 2 给了我一个 502。Nginx 错误日志显示
2016/01/26 14:37:05 [error] 6#6: *1 connect() failed (111: Connection refused)
while connecting to upstream, client: 172.17.0.9, server: code.dev,
request: "GET / HTTP/1.1", upstream: "fastcgi://172.17.0.4:9001"
【问题讨论】:
-
嗯.. 你为什么要“瞄准” nginx 服务器?这真的没有意义..你的HAProxy是在路由器和nginx之间还是在nginx和fpm之间?
-
我不确定我理解你所说的以 Nginx 为目标是什么意思?是的,代理在路由器和nginx之间
-
您正在使用 2 个 nginx 服务器,每个服务器都有一个
server{}块,该块定义了project1.dev或project2.dev,并根据这一点 - 他们将其代理到适当的php-fpm机器。这个逻辑有点不对劲,你甚至不需要HAProxy,在那种情况下它是没用的。但是,那是题外话。你确定第二个fpm服务器允许来自172.17.0.9的连接吗?默认配置只允许来自本地主机的连接。 -
也许您应该将@Dracken 答案设置为正确!它对我有用!