Docker-Compose не будет увеличивать объем моего файла php.ini

Я пытаюсь использовать docker-compose для создания тома моего файла php.ini, чтобы я мог на лету вносить изменения на локальном компьютере, чтобы увидеть, как он влияет на хост-компьютер. К сожалению, до сих пор единственный способ получить файл php.ini в контейнер — это непосредственно во время создания в Dockerfile.

Прикрепленное изображение контейнера работает нормально с текущими настройками ниже.

введите описание изображения здесь

Мой Dockerfile ниже:

FROM ubuntu:14.04
MAINTAINER Joe Astrahan <[email protected]>

VOLUME ["/var/www"]RUN apt-get update && \
apt-get install -y software-properties-common && \
apt-get update && \
apt-get install -y \
apache2 \
curl \
libcurl3 \
libcurl3-dev \
php5 \
php5-cli \
libapache2-mod-php5 \
php5-gd \
php5-json \
php5-ldap \
php5-mysqlnd \
php5-pgsql \
php5-curl \
mysql-client

COPY config/php.ini /etc/php5/apache2/php.ini

# install php-5.5.30
COPY config/install_php-5.5.30.sh /tmp/install_php-5.5.30.sh
RUN /bin/bash /tmp/install_php-5.5.30.shCOPY config/apache_default.conf /etc/apache2/sites-available/000-default.conf
COPY config/run /usr/local/bin/run

RUN chmod +x /usr/local/bin/run
RUN a2enmod rewrite

#This will allow us to modify files in the container for testing if we need to
RUN apt-get update && \
apt-get install -y vim

EXPOSE 80
CMD ["/usr/local/bin/run"]

Мой файл docker-compose.yml находится ниже:

version: '2'
services:
dblive:
image: mysql:5.5.52
volumes:
- ./db_data_live:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ****
MYSQL_DATABASE: ****
MYSQL_USER: ****
MYSQL_PASSWORD: ****

dbdev:
image: mysql:5.5.52
volumes:
- ./db_data_dev:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD:****
MYSQL_DATABASE: ****
MYSQL_USER: ****
MYSQL_PASSWORD: ****

phpmyadmin:
depends_on:
- dblive
- dbdev
image: phpmyadmin/phpmyadmin
environment:
PMA_ARBITRARY : 1
restart: always
ports:
- "8081:80"
web:
build: ./
depends_on:
- dblive
- dbdev
volumes:
- ./web:/var/www
- ./config/php.ini:/etc/php5/apache2/conf.d/custom.ini
- ./logs/apache_error.log:/var/log/apache2/error.log
- ./logs/apache_access.log:/var/log/apache2/access.log
- ./config/apache_default.conf:/etc/apache2/sites-enabled/000-default.conf
restart: always
ports:
- "80:80"- "443:443"

Я попытался следовать совету здесь, невозможно обновить файл php.ini в Docker-контейнере, создав файл custom.ini и смонтировав его в этом месте. Я действительно сделал это правильно, я думаю, потому что если вы посмотрите на мое изображение, которое я прикрепил для phpinfo (), вы увидите, что при разборе дополнительных файлов .ini мой файл custom.ini находится в конце. Я сделал тест, установив asp_tags = On вместо Off, и я не могу. phpinfo () всегда будет показывать его как выключенный. Обратитесь к моему приложенному изображению, показывающему это, несмотря на загрузку моего конфигурационного файла.

Я даже не уверен, действительно ли это чествование какой-либо команды?

введите описание изображения здесь

введите описание изображения здесь

Используются дополнительные файлы

Бежать

#!/bin/bash
set -e

PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL & ~E_DEPRECATED & ~E_NOTICE"}
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/apache2/php.ini
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/cli/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/apache2/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/cli/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/apache2/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/cli/php.ini

source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND

install_php-5.5.30.sh

#!/bin/bash

# install dependencies
apt-get -y update && \
apt-get install -y \
build-essential \
apache2-dev \
libxml2-dev

# download PHP 5.5.30 source code
cd /tmp
curl -fsSL http://php.net/get/php-5.5.30.tar.bz2/from/this/mirror | tar xjf -
cd php-5.5.30

# configure build options
./configure --prefix=/usr \
--with-config-file-path=/etc/php5/apache2 \
--with-config-file-scan-dir=/etc/php5/apache2/conf.d \
--disable-pdo \
--disable-json \
--enable-mbstring \
--with-apxs2

# compile and install
NUM_CORES=`cat /proc/cpuinfo | grep processor | wc -l`
make -j $NUM_CORES
make install

# configure extension directory
echo 'extension_dir="/usr/lib/php5/20121212"' >> /etc/php5/apache2/php.ini

# cleanup
rm -rf /tmp/php-5.5.30 /tmp/install_php-5.5.30.sh

Моя файловая структура

введите описание изображения здесь

4

Решение

Я нашел ответ, поместил файл с именем custom.php.ini в каталог конфигурации (если вы следуете моей структуре каталогов).

Установите громкость, как это в моем примере …

volumes:
- ./web:/var/www
- ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini

По умолчанию каталог сканирования дополнительных файлов php будет выглядеть в каталоге conf.d. Эти файлы будут перезаписывать настройки основного php.ini. Я проверил это с параметром asp_tag, выключив и включив его. Он работает нормально, пока вы делаете следующее ниже.

Уловка, чтобы сделать эту работу состоит в том, чтобы использовать docker-compose down вместо docker-compose kill

Это удаляет контейнеры и их файлы кэша. PHP загружает файл конфигурации только один раз при загрузке и другие файлы, поэтому изменение php.ini или пользовательского файла после этого требует этого docker-compose для принудительного изменения.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]