問題描述
我正在嘗試使用 docker-compose 來處理我的 php.ini 文件,以便我可以在本地機器上即時進行更改,以查看它如何影響主機.不幸的是,到目前為止,我能夠將 php.ini 文件放入容器的唯一方法是直接在 Dockerfile 中創建.
附件是使用下面的當前設置正常運行的容器的圖像.
我的 Dockerfile 如下:
來自 ubuntu:14.04維護者 Joe Astrahan 音量 ["/var/www"]運行 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客戶端復制配置/php.ini/etc/php5/apache2/php.ini# 安裝 php-5.5.30復制 config/install_php-5.5.30.sh/tmp/install_php-5.5.30.sh運行/bin/bash/tmp/install_php-5.5.30.sh復制配置/apache_default.conf/etc/apache2/sites-available/000-default.conf復制配置/運行/usr/local/bin/run運行 chmod +x/usr/local/bin/run運行 a2enmod 重寫#這將允許我們在需要時修改容器中的文件進行測試運行 apt-get 更新 &&apt-get install -y vim曝光 80CMD ["/usr/local/bin/run"]
我的 docker-compose.yml 文件如下:
版本:'2'服務:直播:圖像:mysql:5.5.52卷:- ./db_data_live:/var/lib/mysql重啟:總是環境:MYSQL_ROOT_PASSWORD: ****MYSQL_DATABASE:****MYSQL_USER:****MYSQL_PASSWORD: ****數據庫開發:圖像:mysql:5.5.52卷:- ./db_data_dev:/var/lib/mysql重啟:總是環境:MYSQL_ROOT_PASSWORD:****MYSQL_DATABASE:****MYSQL_USER:****MYSQL_PASSWORD: ****phpmyadmin:依賴于取決于:- dblive- 數據庫開發圖片:phpmyadmin/phpmyadmin環境:PMA_任意:1重啟:總是端口:- 8081:80"網絡:建造: ./依賴于取決于:- dblive- 數據庫開發卷:- ./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"
我嘗試遵循此處的建議,
使用的額外文件
運行
#!/bin/bash設置 -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 &&執行/usr/sbin/apache2 -DFOREGROUND
install_php-5.5.30.sh
#!/bin/bash# 安裝依賴apt-get -y 更新 &&apt-get install -y 構建必不可少的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# 配置構建選項./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進行安裝# 配置擴展目錄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
我的文件結構
我找到了答案,將名為 custom.php.ini 的文件放在 config 目錄中(如果您遵循我的目錄結構).
在我的例子中像這樣設置音量...
卷:- ./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 down 以強制更改.
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.
這篇關于Docker-Compose 不會處理我的 php.ini 文件的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!