2017-01-17 11 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 = Offの代わりにOnを設定することでテストを行いましたが、できません。 phpinfo()は常にオフとして表示します。私の設定ファイルをロードしているにもかかわらず、それを示す私の添付の画像を参照してください。

本当にその中のコマンドを本当に尊敬しているのかどうかはわかりません。

enter image description here

enter image description here

余分なファイルは

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

私は(あなたが私のディレクトリ構造を、以下の場合)configディレクトリに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 kill

docker-compose downを使用することです。 PHPは起動時に一度だけ設定ファイルを読み込み、他のファイルはphp.iniやカスタムファイルを変更するため、このドッカーを作成して変更を強制する必要があります。

関連する問題