我使用php 5.6运行此Docker instance of a linux debian:jessie。
这是我的phpinfo的一部分:
我们可以看到php.ini
应位于
/usr/local/etc/php
这就是我在/ usr / local / etc /
中的内容但是里面没有php.ini。
我另一方面,我在里面有php.ini
那么,我的php.ini究竟是从哪里加载的?
我们甚至没有运行php进程但是php似乎没问题 - 在屏幕上显示phpinfo。
答案 0 :(得分:3)
试试这个答案:
它根本不存在,这意味着php将运行默认选项。
查看您的docker文件,它从“干净”的操作系统启动,在其中安装Apache和PHP。但它永远不会将PHP安装中的php.ini文件复制到/ usr / local / etc / php中。实际上在第31行和第32行中它创建了conf.d目录,但就是它。
所以我建议,在您的docker文件的末尾添加代码以将php.ini-production复制到/usr/local/etc/php.ini,并根据需要进行编辑。或者使用默认选项。
答案 1 :(得分:3)
docker php映像查找的默认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选项运行容器时,您始终可以将该文件链接为一个卷以获取自定义文件,
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
上面的RUN命令将复制默认的生产ini文件,然后修改ini文件中的memory_limit并将其设置为4G。
我更喜欢这种方法,因为它允许使用自定义配置,因此容器在拉出时始终使用默认设置,但是您仍然可以选择通过传入卷来覆盖容器中的ini文件。
答案 2 :(得分:2)
聚会晚了一点,但是由于问题在今天仍然很重要,让我补充一个简短的答案:
正式的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
中找到答案 3 :(得分:0)
简短的回答是你不需要一个。如果您遗失或想要添加扩展程序,可以通过docker-php-ext-install
或docker-php-ext-enable
在Dockerfile中执行此操作。
大多数常见的,你可以简单地执行启用,例如mbstring,但对于一些不太常见的启用,你可能必须首先运行pecl
或者某些东西来获取包。看看this Docker documentation page for more information on php extensions