問(wèn)題描述
我正在嘗試使用 docker-compose 來(lái)處理我的 php.ini 文件,以便我可以在本地機(jī)器上即時(shí)進(jìn)行更改,以查看它如何影響主機(jī).不幸的是,到目前為止,我能夠?qū)?php.ini 文件放入容器的唯一方法是直接在 Dockerfile 中創(chuàng)建.
附件是使用下面的當(dāng)前設(shè)置正常運(yùn)行的容器的圖像.
我的 Dockerfile 如下:
來(lái)自 ubuntu:14.04維護(hù)者 Joe Astrahan 音量 ["/var/www"]運(yùn)行 apt-get 更新 &&apt-get install -y software-properties-common &&apt-get 更新 &&apt-get install -y 阿帕奇2卷曲libcurl3 libcurl3-dev php5php5-cli libapache2-mod-php5 php5-gd php5-json php5-ldap php5-mysqlnd php5-pgsql php5-curl mysql客戶(hù)端復(fù)制配置/php.ini/etc/php5/apache2/php.ini# 安裝 php-5.5.30復(fù)制 config/install_php-5.5.30.sh/tmp/install_php-5.5.30.sh運(yùn)行/bin/bash/tmp/install_php-5.5.30.sh復(fù)制配置/apache_default.conf/etc/apache2/sites-available/000-default.conf復(fù)制配置/運(yùn)行/usr/local/bin/run運(yùn)行 chmod +x/usr/local/bin/run運(yùn)行 a2enmod 重寫(xiě)#這將允許我們?cè)谛枰獣r(shí)修改容器中的文件進(jìn)行測(cè)試運(yùn)行 apt-get 更新 &&apt-get install -y vim曝光 80CMD ["/usr/local/bin/run"]
我的 docker-compose.yml 文件如下:
版本:'2'服務(wù):直播:圖像:mysql:5.5.52卷:- ./db_data_live:/var/lib/mysql重啟:總是環(huán)境:MYSQL_ROOT_PASSWORD: ****MYSQL_DATABASE:****MYSQL_USER:****MYSQL_PASSWORD: ****數(shù)據(jù)庫(kù)開(kāi)發(fā):圖像:mysql:5.5.52卷:- ./db_data_dev:/var/lib/mysql重啟:總是環(huán)境:MYSQL_ROOT_PASSWORD:****MYSQL_DATABASE:****MYSQL_USER:****MYSQL_PASSWORD: ****phpmyadmin:依賴(lài)于取決于:- dblive- 數(shù)據(jù)庫(kù)開(kāi)發(fā)圖片:phpmyadmin/phpmyadmin環(huán)境:PMA_任意:1重啟:總是端口:- 8081:80"網(wǎng)絡(luò):建造: ./依賴(lài)于取決于:- dblive- 數(shù)據(jù)庫(kù)開(kāi)發(fā)卷:- ./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重啟:總是端口:- 80:80"- 443:443"
我嘗試遵循此處的建議,
使用的額外文件
運(yùn)行
#!/bin/bash設(shè)置 -ePHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL & ~E_DEPRECATED & ~E_NOTICE"}sed -ri 's/^display_errorss*=s*Off/display_errors = On/g'/etc/php5/apache2/php.inised -ri 's/^display_errorss*=s*Off/display_errors = On/g'/etc/php5/cli/php.inised -ri "s/^error_reportings*=.*$//g"/etc/php5/apache2/php.inised -ri "s/^error_reportings*=.*$//g"/etc/php5/cli/php.iniecho "error_reporting = $PHP_ERROR_REPORTING" >>/etc/php5/apache2/php.iniecho "error_reporting = $PHP_ERROR_REPORTING" >>/etc/php5/cli/php.inisource/etc/apache2/envvars &&執(zhí)行/usr/sbin/apache2 -DFOREGROUND
install_php-5.5.30.sh
#!/bin/bash# 安裝依賴(lài)apt-get -y 更新 &&apt-get install -y 構(gòu)建必不可少的apache2-dev libxml2-dev# 下載 PHP 5.5.30 源代碼cd/tmpcurl -fsSL http://php.net/get/php-5.5.30.tar.bz2/from/this/mirror |焦油 xjf -cd php-5.5.30# 配置構(gòu)建選項(xiàng)./configure --prefix=/usr --with-config-file-path=/etc/php5/apache2 --with-config-file-scan-dir=/etc/php5/apache2/conf.d --disable-pdo --disable-json --啟用-mbstring --with-apxs2#編譯安裝NUM_CORES=`cat/proc/cpuinfo |grep處理器|wc -l`make -j $NUM_CORES進(jìn)行安裝# 配置擴(kuò)展目錄echo 'extension_dir="/usr/lib/php5/20121212"' >>/etc/php5/apache2/php.ini# 清理rm -rf/tmp/php-5.5.30/tmp/install_php-5.5.30.sh
我的文件結(jié)構(gòu)
我找到了答案,將名為 custom.php.ini 的文件放在 config 目錄中(如果您遵循我的目錄結(jié)構(gòu)).
在我的例子中像這樣設(shè)置音量...
卷:- ./web:/var/www- ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini
默認(rèn)情況下,額外 php 文件的掃描目錄將在 conf.d 目錄中查找.這些文件將覆蓋主 php.ini 的設(shè)置.我使用 asp_tag 選項(xiàng)將其關(guān)閉和打開(kāi)進(jìn)行了測(cè)試.只要您執(zhí)行以下操作,它就可以正常工作.
完成這項(xiàng)工作的技巧是使用 docker-compose down
而不是 docker-compose kill
這會(huì)刪除容器及其緩存文件.PHP 僅在啟動(dòng)時(shí)加載一次配置文件和其他文件,因此更改 php.ini 或自定義文件后需要此 docker-compose down 以強(qiáng)制更改.
I'm trying to use docker-compose to volume my php.ini file so I can make changes on the fly on my local machine to see how it affects the host machine. Unfortunately the only way I've been able to get the php.ini file into the container is directly during creation in the Dockerfile so far.
Attached is an image of the container running fine with the current settings below.
My Dockerfile is below:
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"]
My docker-compose.yml file is below:
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"
I tried following the advice here, can't upate php.ini file in Docker container, by creating a custom.ini file and mounting it in that location. I actually did it correctly I think because if you look at my image I attached for phpinfo(), you can see that under additional .ini files parsed my custom.ini is there at the end. I did a test though by setting asp_tags = On instead of Off and I can't. phpinfo() will always show it as off. Refer to my attached image of it showing it off despite loading my config file.
I'm not even sure if its really honoring any of the commands in there at all?
Extra Files Used
Run
#!/bin/bash
set -e
PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL & ~E_DEPRECATED & ~E_NOTICE"}
sed -ri 's/^display_errorss*=s*Off/display_errors = On/g' /etc/php5/apache2/php.ini
sed -ri 's/^display_errorss*=s*Off/display_errors = On/g' /etc/php5/cli/php.ini
sed -ri "s/^error_reportings*=.*$//g" /etc/php5/apache2/php.ini
sed -ri "s/^error_reportings*=.*$//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
My file structure
I found the answer, put a file called custom.php.ini in the config directory (if you are following my directory structure).
Set the volumes like this in my example...
volumes:
- ./web:/var/www
- ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini
By default the scan directory for extra php files will look in the conf.d directory. These files will overwrite the settings of the main php.ini. I tested this with the asp_tag option turning it Off and On. It works fine as long as you do the following below.
The trick to making this work is to use docker-compose down
instead of docker-compose kill
This removes the containers and their cache files. PHP only loads the configuration file once at bootup and the other files so changing the php.ini or the custom file after requires this docker-compose down to force the change.
這篇關(guān)于Docker-Compose 不會(huì)處理我的 php.ini 文件的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!