为什么我在docker容器中安装PHP时没有php.ini文件?

为什么我在docker容器中安装PHP时没有php.ini文件?

我正在使用它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 文件:

  1. 运行临时 php 容器

docker run -d --name php-tmp php:5-fpm

  1. 复制 php 档案

docker cp php-tmp:/usr/src/php.tar.xz 。

  1. 将 php.ini-development 或 php.ini-production 文件提取到配置目录。例如:

compose_root/php/php.ini-开发

  1. 在 php 容器中使用 php.ini 添加卷

    卷:

    • .root:/var/www/html:ro
    • ./php/php.ini-开发:/usr/local/etc/php/php.ini

相关内容