我正在使用它docker-compose
来设置一个最小nginx
+php-fpm
应用程序,但是由于某种原因,docker 容器上没有 php.ini 文件(我知道,因为phpinfo()
说Loaded Configuration File: (none)
)。
这是我的docker-compose.yml
文件:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./site.conf:/etc/nginx/conf.d/site.conf
links:
- php
php:
image: php:5-fpm
volumes:
- .root:/var/www/html:ro
command: bash -c "apt-get update && apt-get install -y php5-mysql && php-fpm"
site.conf
也非常简单:
server {
index index.php;
server_name local.myspicesage.com;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
最后,我有最基本的index.php
可能:
<?php
echo phpinfo();
如果没有必要,我真的不想从头开始。dockerphp:5-fpm
镜像中是否应该包含一个 php.ini 文件?如果没有,是否有一个通用文件可以用来开始?
答案1
容器还具有/usr/local/etc/php/conf.d
并将读取和解析该目录下的每个配置文件。
请注意,它仍然会说Loaded Configuration File => (none)
,但它会还说Additional .ini files parsed
,然后你会看到它穿过该目录...以及容器放在那里的各种文件:docker-php-ext-XXX.ini
。 (因此这样说相当具有误导性(none)
......)
做这样的事很有用:
php -r 'phpinfo();' | grep -i conf
... 在这种情况下,它将非常快速地向您显示 PHP 的大量输出中包含(大写或小写)字符串的行conf
。
答案2
您需要添加 php.ini 文件:
- 运行临时 php 容器
docker run -d --name php-tmp php:5-fpm
- 复制 php 档案
docker cp php-tmp:/usr/src/php.tar.xz 。
- 将 php.ini-development 或 php.ini-production 文件提取到配置目录。例如:
compose_root/php/php.ini-开发
在 php 容器中使用 php.ini 添加卷
卷:
- .root:/var/www/html:ro
- ./php/php.ini-开发:/usr/local/etc/php/php.ini