Как манипулировать настройками php.ini в Docker файле?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Как манипулировать настройками php.ini в Docker файле?

Сообщение EVOSandru6 » 2018.11.15, 16:30

Добрый день,

Есть docker-compose.yml:

Код: Выделить всё

...
php-fpm:
    build:docker/containers/php-fpm
    volumes:
      - ./.:/var/www
      - ./volumes/php-fpm/php7.1-fpm.ini:/usr/local/etc/php/php.ini
...

./docker/containers/php-fpm/Dockerfile:

Код: Выделить всё

FROM php:7.1-fpm-alpine

RUN apk --update --virtual build-deps add \
        autoconf \
        make \
        gcc \
        g++ \
        libtool \
        icu-dev \
        curl-dev \
        freetype-dev \
        imagemagick-dev \
        pcre-dev \
        postgresql-dev \
        libmcrypt-dev \
        libjpeg-turbo-dev \
        libpng-dev \
        libxml2-dev && \
    apk add \
        git \
        curl \
        bash \
        bash-completion \
        icu \
        imagemagick \
        pcre \
        freetype \
        libmcrypt \
        libintl \
        libjpeg-turbo \
        libpng \
        libltdl \
        libxml2 \
        mysql-client \
        nodejs-npm \
        postgresql && \
    pecl install \
        apcu \
        imagick \
        mcrypt-1.0.0 && \
    docker-php-ext-configure gd \
        --with-gd \
        --with-freetype-dir=/usr/include/ \
        --with-png-dir=/usr/include/ \
        --with-jpeg-dir=/usr/include/ && \
    docker-php-ext-configure bcmath && \
    docker-php-ext-install \
        soap \
        zip \
        curl \
        bcmath \
        exif \
        gd \
        iconv \
        intl \
        mbstring \
        opcache \
        pdo_mysql \
        pdo_pgsql && \
    apk del \
        build-deps

ARG phpIniPath=/usr/local/etc/php/php.ini

RUN sed -ri -e 's/^allow_url_fopen\s*=.*/allow_url_fopen = On/' $phpIniPath
RUN sed -i -e 's/^allow_url_fopen\s*=.*/allow_url_fopen = On/' $phpIniPath
RUN sed -i -e 's/^short_open_tag\s*=.*/short_open_tag = On/' $phpIniPath
RUN sed -i -e 's/^;extension=php_curl.dll\s*=.*/extension=php_curl.dll/' $phpIniPath
RUN echo 'extension = mcrypt.so' >> $phpIniPath

WORKDIR /var/www
При попытке:

Код: Выделить всё

sudo docker-compose up --build -d
Ловлю:

...

Step 8/9 : RUN sed -ri -e 's/^allow_url_fopen\s*=.*/allow_url_fopen = On/' $phpIniPath
---> Running in 84504b5e4c25
sed: /usr/local/etc/php/php.ini: No such file or directory
ERROR: Service 'php-fpm' failed to build: The command '/bin/sh -c sed -ri -e 's/^allow_url_fopen\s*=.*/allow_url_fopen = On/' $phpIniPath' returned a non-zero code: 1



Подскажите на каком моменте можно получить файл /usr/local/etc/php/php.ini в контейнере?

Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: Как манипулировать настройками php.ini в Docker файле?

Сообщение nizsheanez » 2018.11.17, 06:10

Volume механизм - монтирует директорию после старта контейнера (до запуска приложения в нем). Если надо файл/директорию иметь на стадии билда используй команду ADD в Dockerfile https://docs.docker.com/engine/reference/builder/#add
(см. также COPY)

Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: Как манипулировать настройками php.ini в Docker файле?

Сообщение nizsheanez » 2018.11.17, 06:13

Так же советую читать Dockerfile на базе которого ты строишь свой (на DockerHub есть ссылки на исходники на Github).
Например тут можно найти что есть уже переменная окружения хранящая путь до .ini файлов https://github.com/docker-library/php/b ... rfile#L153
Лучше использовать ее, вместо создания новой переменной phpIniPath
(в описании на DockerHub это тоже написано, но Dockerfile достаточно простые обычно чтобы их пробежать глазами и выцепить важные моменты)

Аватара пользователя
ElisDN
Сообщения: 5319
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как манипулировать настройками php.ini в Docker файле?

Сообщение ElisDN » 2018.11.17, 12:27

Код: Выделить всё

ADD ./php/defaults.ini /usr/local/etc/php/conf.d/defaults.ini

EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Как манипулировать настройками php.ini в Docker файле?

Сообщение EVOSandru6 » 2018.11.17, 14:03

nizsheanez писал(а):
2018.11.17, 06:13
Так же советую читать Dockerfile на базе которого ты строишь свой (на DockerHub есть ссылки на исходники на Github).
Например тут можно найти что есть уже переменная окружения хранящая путь до .ini файлов https://github.com/docker-library/php/b ... rfile#L153
Лучше использовать ее, вместо создания новой переменной phpIniPath
(в описании на DockerHub это тоже написано, но Dockerfile достаточно простые обычно чтобы их пробежать глазами и выцепить важные моменты)
Благодарю!

EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Как манипулировать настройками php.ini в Docker файле?

Сообщение EVOSandru6 » 2018.11.17, 14:05

ElisDN писал(а):
2018.11.17, 12:27

Код: Выделить всё

ADD ./php/defaults.ini /usr/local/etc/php/conf.d/defaults.ini
Благодарю

Ответить