如何在PHP-FPM Docker镜像中设置max_execution_time?

8
我正在使用来自https://hub.docker.com/_/php/的php5.6-fpm docker镜像。
当我在phpinfo()中查看php.ini位置时,它显示为/usr/local/etc/php。但是,在该路径下并没有找到php.ini文件。
现在我想要改变max_execution_time这个php变量。我如何在自定义docker镜像中实现这一点?

假设您使用的是Apache2,路径为php/apache2/php.ini。 - LF00
1
你可以像以往一样进行操作,Docker 并没有什么神奇的地方。另外,你是否将主机文件系统与容器文件系统混淆了?php.ini 文件在容器中,而不是主机文件系统中。 - GordonM
1
Docker旨在轻松且频繁地进行重建,您可以编辑Dockerfile,进行修改,再次构建并运行它。 - user2915097
@GordonM 我已经使用 docker exec -it containerId /bin/bash 命令检查了正在运行的容器文件系统,但在 /usr/local/etc/php 目录下没有显示任何 php.ini 文件。 - user7399816
@KrisRoofe 我正在使用 php docker 镜像的 php-fpm 变体,并使用另一个 nginx 容器作为反向代理。 - user7399816
@user2915097 问题是在Dockerfile中我应该在哪里进行更改,因为该docker镜像中不存在php.ini文件。 - user7399816
3个回答

8

您需要做的是,从官方FPM镜像中派生出来,然后使用RUN+sed更改值,例如:

FROM php:7.1

RUN sed -e 's/max_execution_time = 30/max_execution_time = 100/' -i /etc/php/7.1/fpm/php.ini

请确保路径/etc/php/7.1/fpm/php.ini在您的情况下是正确的,这取决于所使用的镜像,我没有验证过php:7.1以上的版本。
提示:当您需要更改很多值时,您可能更愿意在您的镜像中使用自己的php.ini。
COPY php.ini /etc/php/7.1/fpm/php.ini

但这只是一种情况,仅更改几个值可以使用sed完成。


8

在 Dockerfile 文件中添加以下行

RUN echo 'max_execution_time = 120' >> /usr/local/etc/php/conf.d/docker-php-maxexectime.ini;

那么

docker-compose build 
docker-compose up

或者

docker build 
docker start your_machine_name

提供了 PHP_INI_SCAN_DIR = /usr/local/etc/php/conf.d。

您可以在运行中检查。

<? phpinfo();

应该显示如下:

Scan this dir for additional .ini files | /usr/local/etc/php/conf.d

3

简单的解决方案:

  1. 浏览您的Docker镜像,并在php.ini-developmentphp.ini-production之间找到最适合您需要的配置(第一个用于日志记录,第二个用于类似生产环境的情况)。

  2. 将配置文件复制到您的项目文件夹中,或者与Dockerfiledocker-compose.yml文件放在同一目录下。

我使用php:7.4.12-apache镜像作为起点,php.ini文件必须被复制到/usr/local/etc/php/目录中,在下一次启动时会自动加载。

  1. 现在编辑您需要的任何属性到配置文件中,并将其保存为php.ini

  2. 最后,该文件必须被复制到镜像/容器中,请参见以下行中的操作方法。

Dockerfile (复制到镜像中)

添加 COPY ./php.ini /usr/local/etc/php/php.ini

或者

docker-compose.yml (复制到容器中)

services:
    php-apache-dev:

        ...

        volumes:
            - ./php.ini:/usr/local/etc/php/php.ini

        ...

这个配置文件将php.ini放在与docker-compose.yml相同的文件夹中。

注意:老实说,我更喜欢将其复制到容器中,因为我可以编辑配置文件并简单地重新启动容器,而不需要重新构建镜像,但这取决于您的选择。

我认为这个解决方案在开发中更有用,更简单,并且您可以编辑多个属性,而不仅仅是一个。

祝编程愉快!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接