我正在Docker中进行自我培训,并且试图建立一个我最终想在ECS上托管的Nginx + PHP FPM环境(仅出于培训目的)。 PHP环境运行着一个基本的Symfony 4服务(只返回一个json,没什么特别的)。但是问题出在我的Nginx容器上。 当我在Dockerfile中暴露了PHP容器上的端口5000时,确实发生了一些奇怪的事情,但是当尝试在此端口上访问PHP容器时,我的Nginx容器给我严重的网关错误。如果我将Nginx容器用于fastcgi_pass的端口更改为9000,而未更改PHP容器的公开端口(在Dockerfile中将其保留为5000),则一切都很好,并且设置可以正常进行。 有没有人可以给我一些提示,为什么呢?
我已经检查docker ps
来检查端口,并且确实在PHP容器上同时打开了端口5000和9000,但是似乎只有端口9000可用。
Nginx conf文件
server {
listen 80;
server_name localhost;
root /var/www/symfony/public;
index index.php;
access_log /var/log/access.log;
error_log /var/log/error.log;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param HTTPS off;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass symfony:9000;
fastcgi_index index.php;
}
}
Symfony dockerfile(shortenend)
FROM php:7.2-fpm
WORKDIR /var/www/symfony
... (installation things)
COPY . /var/www/symfony
EXPOSE 5000
Docker-compose
version: "3.7"
services:
symfony:
container_name: symfony
build: ./symfony
volumes:
- ./symfony:/var/www/symfony
- ./logs/symfony:/var/www/symfony/var/logs
networks:
- api
nginx:
container_name: nginx
build: ./nginx
ports:
- 80:80
volumes:
- ./symfony:/var/www/symfony
- ./logs/nginx:/var/log/nginx
networks:
- api
depends_on:
- symfony
volumes:
symfony:
networks:
api:
driver: "bridge"
Docker ps结果
PORTS NAMES
0.0.0.0:80->80/tcp nginx
5000/tcp, 9000/tcp symfony
我希望能够将symfony:9000更改为symfony:5000,并能够从PHP容器中获取结果。