Назад | Перейти на главную страницу

Почему при установке PHP в контейнер докеров нет файла php.ini?

я использую docker-compose установить минимальный nginx + php-fpm приложение, но по какой-то причине в контейнере докера нет файла 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();

Я действительно не хочу начинать с нуля, если мне не нужно. Должен ли быть файл php.ini, включенный в php:5-fpm образ докера? Если нет, то есть ли общий файл, который я мог бы использовать для начала?

Вам необходимо добавить файл php.ini:

  1. Запустить временный контейнер php

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

  1. Скопировать архив php

докер cp php-tmp: /usr/src/php.tar.xz.

  1. Извлеките файл php.ini-development или php.ini-production в каталог config. Пример:

compose_root / php / php.ini-разработка

  1. Добавьте объем с помощью php.ini в контейнер php

    объемы:

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

В контейнере также есть /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.