Docker-Compose将不会调整我的php.ini文件

我正在尝试使用docker-compose来调整我的php.ini文件,这样我就可以在本地机器上进行更改,以查看它是如何影响主机的。 不幸的是,我已经能够将php.ini文件放入容器的唯一方法是直接在Dockerfile中创build。

附件是容器运行良好的图像,使用下面的当前设置。

在这里输入图像说明

我的Dockerfile如下:

FROM ubuntu:14.04 MAINTAINER Joe Astrahan <jastrahan@poolservice.software> 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"] 

我的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" 

我试着按照这里的build议, 不能在Docker容器中更新php.ini文件 ,通过创buildcustom.ini文件并将其安装在该位置。 我实际上做得正确我认为是因为如果你看我的图像我附加phpinfo(),你可以看到,在额外的.ini文件parsing我的custom.ini是在那里。 我做了一个testing,虽然通过设置asp_tags = On而不是closures,我不能。 phpinfo()将始终显示为closures。 尽pipe加载我的configuration文件,请参阅我的附加图像显示它。

我甚至不确定它是否真的遵守那里的任何命令?

在这里输入图像说明

在这里输入图像说明

使用额外的文件

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

我的文件结构

在这里输入图像说明

我find了答案,把一个名为custom.php.ini的文件放在config目录下(如果你是在跟随我的目录结构的话)。

在我的例子中像这样设置卷…

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

默认情况下,额外的php文件的扫描目录将在conf.d目录中查找。 这些文件将覆盖主php.ini的设置。 我用asp_tag选项将其closures和打开进行testing。 只要您按照以下步骤操作,它就可以正常工作。

做这个工作的诀窍是使用docker-compose down而不是docker-compose kill

这将删除容器及其caching文件。 PHP只在启动时加载一次configuration文件,而其他文件在更改php.ini或自定义文件之后,需要使用此docker-compose来强制更改。