2017-01-17 4 views
3

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

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

enter image description here

Мои 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.sh 


COPY 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"] 

Мой докер-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" 

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

Я даже не уверен, что он действительно чтит любую из команд там вообще?

enter image description here

enter image description here

Extra Files Используется

Run

#!/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 

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

enter image description here

+0

Я хочу отметить, что если я пытаюсь сделать тома непосредственно в /etc/php/apache2/php.ini при запуске контейнера, он застрял в каком-то бесконечном цикле? (В принципе, он никогда не запускается, и контейнер продолжает перезапускать снова и снова) –

ответ

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 или настраиваемого файла после этого требует, чтобы этот доклер скомпоновался, чтобы заставить это изменение.

 Смежные вопросы

  • Нет связанных вопросов^_^