【问题标题】:How to change php-fpm default port?如何更改 php-fpm 默认端口?
【发布时间】:2025-11-25 17:40:01
【问题描述】:

我正在使用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}

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

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

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

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

如何正确更改默认端口?

【问题讨论】:

  • 这个问题有什么解决办法吗?
  • @Iman 不幸的是,在这种情况下,最好的解决方案是为每个 php-fpm 使用不同的名称

标签: docker nginx docker-compose dockerfile fpm


【解决方案1】:

我认为问题不在于 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

【讨论】:

  • 我在www.conf文件中更改了这一行:特别是listen = 127.0.0.1:9001,我指定了端口9001,但实际上我有同样的问题
【解决方案2】:

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

如果你的 php-fpm 真的在监听 9001 端口,那么这就是你必须在你的 nginx 配置中使用的端口。

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

【讨论】:

    【解决方案3】:

    对于 Dockerfile 中的这一行不起作用(?):
    RUN sed -i 's/9000/9001/' /usr/local/etc/php-fpm.d/zz-docker.conf

    所以我决定在容器启动后进行此更改:

    docker exec -i your_container bash -c 'sed -i 's/9000/9001/' /usr/local/etc/php-fpm.d/zz-docker.conf'

    然后重新启动容器以使更改发生

    希望能帮到你

    【讨论】:

    • 我也试过这个解决方案.. 但主要问题是 php-fpm 流默认为端口 9000。因此,即使您更改端口,也会与其他服务产生冲突使用同名的php-fpm,例如:nginx。我使用代理发现了这种行为,我不知道没有代理是否有效
    • 之后,您可以在 docker-compose.yml 文件中为您的容器设置不同的名称,并将它们与它们的名称映射到 nginx 配置文件中。我没有任何问题了