我的 php.ini 从哪里加载到 php Docker 容器中?

From where is my php.ini being loaded in php Docker container?

我是 运行 这个 Docker instance of a linux debian:jessie 和 php 5.6.

这是我的php信息的一部分:

我们可以看到 php.ini 应该位于

/usr/local/etc/php

这就是我里面的东西 /usr/local/etc/

但是里面没有php.ini

我反之,我里面有php.ini

那么,我的 php.ini 究竟是从哪里加载的?

我们甚至没有 php 进程 运行 但 php 似乎没问题 - 正在屏幕上显示 php 信息。

让我们尝试一下作为答案:

它根本不存在,这意味着 php 将 运行 默认选项。

查看您的 docker 文件,它从“干净”OS 开始,在其中安装 Apache 和 PHP。但它从不将 php.ini 文件从 PHP 安装复制到 /usr/local/etc/php。实际上在第 31 和 32 行中它创建了 conf.d 目录,仅此而已。

所以我建议,在您的 docker 文件的末尾,添加代码以将 php.ini-production 复制到 /usr/local/etc/php.ini,并根据需要进行编辑。或者使用默认选项。

简而言之,您不需要。如果您缺少或想要添加扩展,您可以在您的 Dockerfile 中执行 docker-php-ext-installdocker-php-ext-enable.

大多数常见的,你可以简单地启用,例如mbstring,但对于一些不太常见的,你可能必须先运行 pecl或其他东西才能获得包裹。看看this Docker documentation page for more information on php extensions

dockerphp 图像查找的默认 php.ini 文件是:

 /usr/local/etc/php/php.ini

您可以在 phpinfo 函数的输出中看到这一点(容器中只有 运行 "php -a",然后在提示符处 "phpinfo();"):

Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini

当 运行使用 -v 选项设置容器时,您总是可以 link 此文件作为一个卷来获得自定义文件,例如:

docker run -v /local/path/to/php.ini:/usr/local/etc/php/php.ini [OPTIONS] IMAGE [COMMAND] [ARG...]

我通常更喜欢使用它附带的默认 ini 文件,只根据需要修改一些选项。如果您希望您的容器在构建期间执行此操作,您可以在 Dockerfile 中执行类似以下操作:

    RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini && \
        sed -i -e "s/^ *memory_limit.*/memory_limit = 4G/g" /usr/local/etc/php/php.ini

上面的运行命令会复制默认的生产ini文件,然后修改memory_limit并在ini文件中设置为4G。

我更喜欢这种方法,因为它允许使用自定义配置,因此容器在拉取时始终使用默认设置,但您仍然可以选择通过传入一个卷来覆盖容器中的 ini 文件。

聚会有点晚了,但由于今天的问题仍然相关,让我添加一个简短的答案:

官方 php:7 图片从 /usr/local/etc/php 文件夹获取设置。

# First log into the running container
$ docker exec -it «container_name» /bin/bash

# List folder content
$ ls /usr/local/etc/php

# Which outputs following line
conf.d  php.ini-development  php.ini-production

如果需要,通过 conf.d 文件夹修改设置似乎是更好的选择,因为 xdebug 使用它。例如,您可以通过将 uploads.ini 添加到具有以下内容的 conf.d 文件夹来更改上传大小:

file_uploads = On
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600

ini 指令的完整列表可在 https://www.php.net/manual/en/ini.core.php

处找到

如果您正在使用类似 wodbydocker4phpdocker4drupal)或 lando 或尝试找到“为什么 php.ini 不起作用”的答案(像我一样),这些工具使用它们自己的方式将配置传递到 php

https://github.com/wodby/php#php-and-php-fpm-configuration