как установить изображение докера max_execution_time php-fpm?

Я использую образ докера для php5.6-fpm из https://hub.docker.com/_/php/.

Когда я проверяю местоположение php.ini в phpinfo(), он говорит, что это /usr/local/etc/php, но когда я смотрю на этот путь, там нет php.ini.

Теперь я хочу изменить переменную php max_execution_time. Как я могу сделать это в пользовательском образе докера?


person Community    schedule 10.01.2017    source источник
comment
предположим, вы используете apache2, путь php/arache2/php.ini   -  person LF00    schedule 10.01.2017
comment
Вы делаете это так же, как всегда. В Docker нет ничего волшебного. Кроме того, вы не путаете файловую систему хоста с файловой системой контейнера? Файл php.ini находится в контейнере, а не в файловой системе хоста.   -  person GordonM    schedule 10.01.2017
comment
docker спроектирован так, чтобы его можно было легко и часто пересобирать, редактировать файл Dockerfile, вносить изменения, создавать его снова и запускать.   -  person user2915097    schedule 10.01.2017
comment
@GordonM Я проверил работающую файловую систему контейнера с помощью docker exec -it containerId /bin/bash, и он не показал никакого php.ini в /usr/local/etc/php   -  person    schedule 10.01.2017
comment
@KrisRoofe Я использую вариант php-fpm образа php docker и использую другой контейнер nginx в качестве обратного прокси.   -  person    schedule 10.01.2017
comment
@user2915097 user2915097 Вопрос в том, где мне изменить файл Docker, поскольку в этом образе докера нет существующего php.ini.   -  person    schedule 10.01.2017


Ответы (3)


Что вы делаете, так это извлекаете из официального образа FPM, а затем используете RUN+sed для изменения значения, например:

FROM php:7.1

RUN sed -e 's/max_execution_time = 30/max_execution_time = 100/' -i /etc/php/7.1/fpm/php.ini

Пожалуйста, убедитесь, что путь /etc/php/7.1/fpm/php.ini правильный в вашем случае, это зависит от используемого изображения, я не проверял выше php: 7.1.

Подсказка: когда вам нужно изменить много значений, вы можете просто использовать свой собственный php.ini в своем изображении.

COPY php.ini /etc/php/7.1/fpm/php.ini

Но это на всякий случай, изменить всего несколько значений можно с помощью sed

person Eugen Mayer    schedule 10.01.2017

добавить следующую строку в Dockerfile

RUN echo 'max_execution_time = 120' >> /usr/local/etc/php/conf.d/docker-php-maxexectime.ini;

тогда

docker-compose build 
docker-compose up

or

docker build 
docker start your_machine_name

при условии, что PHP_INI_SCAN_DIR = /usr/local/etc/php/conf.d. Вы можете проверить это на ходу

<? phpinfo();

должен сказать

Scan this dir for additional .ini files | /usr/local/etc/php/conf.d
person Michał Grzegorzewski    schedule 01.03.2020

Простое решение:

  1. Перейдите по своему образу докера и найдите конфигурацию, которая в основном адаптируется к вашим потребностям, между php.ini-development и php.ini-production (первая может быть больше предназначена для ведения журнала, вторая - для рабочей среды).

  2. Скопируйте файл конфигурации в папку вашего проекта или туда, где вы храните Dockerfile или docker-compose.yml

Я использую php:7.4.12-apacheimage в качестве отправной точки, файл php.ini необходимо скопировать в /usr/local/etc/php/, и он будет загружен автоматически при следующем запуске.

  1. Теперь отредактируйте любое свойство, которое вам нужно, в файле конфигурации и сохраните его как php.ini.

  2. Наконец, файл необходимо скопировать в образ/контейнер, смотрите, как это делается в следующих строках.

Dockerfile (для копирования в образ)

Добавить COPY ./php.ini /usr/local/etc/php/php.ini

ИЛИ

docker-compose.yml (для копирования в контейнер)

services:
    php-apache-dev:

        ...

        volumes:
            - ./php.ini:/usr/local/etc/php/php.ini

        ...

в этой конфигурации файл php.ini находится в той же папке, что и docker-compose.yml

Примечание: честно говоря, я предпочитаю копировать в контейнер, потому что могу отредактировать конфигурацию и просто перезапустить контейнер, не пересобирая образ, но решать вам.

Я считаю это решение более полезным при разработке, оно проще, и вы можете редактировать многие свойства, а не только одно.

Удачного кодирования!

person funder7    schedule 16.03.2021