首页 > 解决方案 > Nginx + PHP-FPM:PHP-FPM 容器的 5000 端口连接被拒绝,而 9000 端口没有问题

问题描述

我在 Docker 中训练自己,我正在尝试设置一个 Nginx + PHP FPM 环境,我最终想在 ECS 上托管(仅用于培训目的)。PHP 环境运行了一个基本的 Symfony 4 服务(只是返回一个 json,没什么特别的)。然而,问题在于我的 Nginx 容器。发生了一些非常奇怪的事情,因为我在我的 Dockerfile 中暴露了 PHP 容器上的端口 5000,但是我的 Nginx 容器在尝试访问此端口的 PHP 容器时给了我错误的网关错误。如果我将 Nginx 容器用于 fastcgi_pass 的端口更改为 9000,而不更改 PHP 容器的公开端口(在 Dockerfile 中将其保留为 5000),一切都很好,并且设置正常。有没有人可以给我一些提示,为什么会这样?

docker ps检查了端口,确实端口 5000 和 9000 在 PHP 容器上都是打开的,但似乎只有端口 9000 可用。

Nginx 配置文件

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

码头工人组成

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 容器中获取结果。

标签: phpdockernginxdocker-compose

解决方案


推荐阅读