如何更改 php-fpm 默认端口?
How to change php-fpm default port?
我正在使用 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
一切正常,但流是错误的,因为它是另一个应用程序的内容。
如何正确更改默认端口?
请记住,您的 nginx docker 通过内部 docker 网络连接,您的 docker 主机端口映射 9001:9000
未被考虑在内。
如果您的 php-fpm 确实在端口 9001 上侦听,那么这是您必须在 nginx 配置中使用的端口。
此外,EXPOSE
主要是声明性的,不会自行公开任何内容 (https://docs.docker.com/engine/reference/builder/#expose),相应的服务仍必须正确配置才能使用该端口。
我认为问题不在于 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
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
的 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
一切正常,但流是错误的,因为它是另一个应用程序的内容。
如何正确更改默认端口?
请记住,您的 nginx docker 通过内部 docker 网络连接,您的 docker 主机端口映射 9001:9000
未被考虑在内。
如果您的 php-fpm 确实在端口 9001 上侦听,那么这是您必须在 nginx 配置中使用的端口。
此外,EXPOSE
主要是声明性的,不会自行公开任何内容 (https://docs.docker.com/engine/reference/builder/#expose),相应的服务仍必须正确配置才能使用该端口。
我认为问题不在于 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
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'
然后重新启动容器以使更改生效
希望能帮到你