我正在为我的本地开发环境使用Docker。我现在的设置是5个容器(1个HaProxy + 2个NGINX + 2个PHP7-FPM)。
代理容器用于根据网址引导请求,因此,如果我输入http://project1.dev
,它会将请求代理到使用project1-nginx
评估php的project1-php
。 http://project2.dev
的设置类似。
现在,我试图围绕两个php容器的端口。默认的fpm端口是9000,因此两个php容器都无法在此运行。我假设去这里的方法是让两个容器导出端口9000但是在主机上使它们是9000和9001?
我的撰写文件中的这些内容。
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"
答案 0 :(得分:0)
与php-fpm7有类似的问题, 正如@Mjh在评论中提到的那样,默认情况下fpm听127.0.0.1:9000,
所以你应该用0.0.0.0:9000替换它,
我在那里找到了一个解决方案:githib:matriphe/docker-alpine-nginx
所以你可以添加到你的fpm容器Dockerfile:
RUN sed -i "s|;*listen\s*=\s*127.0.0.1:9000|listen = 9000|g" /etc/php7/php-fpm.conf
答案 1 :(得分:0)
对于那些看起来像我为同时为不同项目同时运行多个NGINX和PHP-FPM容器的方法所做的工作,发现此SO线程遇到了这个问题:
https://github.com/docker-library/php/issues/479
在php-fpm Dockerfile中:
FROM php:7.2-fpm
RUN sed -i 's/9000/3001/' /usr/local/etc/php-fpm.d/zz-docker.conf
然后在您的docker-compose.yaml
文件中,您可以将Nginx指向该PHP-FPM实例的特定端口。
答案 2 :(得分:-1)
只是想我会提到 Traefik Proxy 是处理这种情况的绝佳方式