如何更改 php-fpm 默认端口?

问题描述

我正在使用 PHP-fpm,它在端口 9000认运行。问题是我有其他基于 PHP-fpm 的 docker 容器,所以我需要将认端口更改为另一个端口,以免混淆 Nginx

这是我的Dockerfile

FROM PHP:8.0.2-fpm-alpine
RUN sed -i 's/9000/9001/' /usr/local/etc/PHP-fpm.d/zz-docker.conf

workdir /var/www/html

CMD ["PHP-fpm"]

EXPOSE 9001

我尝试使用 sed 命令将端口 9000 替换为 9001

在我的 docker-compose 文件中,我有这样的配置:

version: '3.9'

services:

  PHP-fpm:
    container_name: app
    restart: always
    build:
      context: .
      dockerfile: ./docker/PHP-fpm/Dockerfile
    ports:
      - "9001:9000"
    volumes:
      - ./src:/var/www/html
      - ./docker/PHP-fpm/config/www.conf:/usr/local/etc/PHP-fpm.d/www.conf
      - ./src/public:/app/public
      - ./src/writable:/app/writable

  Nginx:
    image: Nginx:stable-alpine
    container_name: Nginx
    restart: always
    volumes:
      - ./src:/var/www/html
      - ./docker/Nginx/Nginx.conf:/etc/Nginx/Nginx.conf
      - ./docker/Nginx/sites/:/etc/Nginx/sites-available
      - ./docker/Nginx/conf.d/:/etc/Nginx/conf.d
    depends_on:
      - PHP-fpm
    environment:
      VIRTUAL_HOST: ${HOST}
      LETSENCRYPT_HOST: ${HOST}
      LETSENCRYPT_EMAIL: ${EMAIL}

如您所见,我也在 9001 文件中公开了端口 docker-compose

default.conf 文件夹中可用的文件 conf.d 包含以下内容

upstream PHP-upstream {
    server PHP-fpm:9001;
}

问题是由于某种原因,当我加载我的网站时,我收到错误 500。所以这意味着流不发送任何信号。如果我更改端口 9000 一切正常,但流是错误的,因为它是另一个应用程序的内容

如何正确更改认端口?

解决方法

我认为问题不在于 sed 命令本身,而是与您为它提到的错误文件有关。

/usr/local/etc/php-fpm.d/zz-docker.conf

这是您尝试更改其中的端口的文件,但在您的 docker-compose 文件中,您正在映射其他内容

./docker/php-fpm/config/www.conf:/usr/local/etc/php-fpm.d/www.conf
,

请记住,您的 nginx docker 通过内部 docker 网络连接,您的 docker 主机端口映射 9001:9000 未考虑在内。

如果您的 php-fpm 确实在侦听端口 9001,那么这就是您必须在 nginx 配置中使用的端口。

此外,EXPOSE 主要是声明性的,本身不公开任何内容 (https://docs.docker.com/engine/reference/builder/#expose),相应的服务仍必须正确配置才能使用该端口。