can';t更新Docker容器中的php.ini文件
我正试图用Nginx和PHP7在Docker上设置Magento2 我已经添加了一个定制的php.ini文件,这是。我可以从phpinfo.php中看到它正在加载我的php.ini文件,但是没有我的更新。 应该是:can';t更新Docker容器中的php.ini文件,php,nginx,docker,dockerfile,php-ini,Php,Nginx,Docker,Dockerfile,Php Ini,我正试图用Nginx和PHP7在Docker上设置Magento2 我已经添加了一个定制的php.ini文件,这是。我可以从phpinfo.php中看到它正在加载我的php.ini文件,但是没有我的更新。 应该是: memory_limit = 2G max_execution_time = 800 我已经检查了PHP容器,我可以看到PHP.ini文件有正确的设置,或者我认为是这样的 $ docker exec -it mymagento2docker_php_1 /bin/bash #
memory_limit = 2G
max_execution_time = 800
我已经检查了PHP容器,我可以看到PHP.ini文件有正确的设置,或者我认为是这样的
$ docker exec -it mymagento2docker_php_1 /bin/bash
# cat /usr/local/etc/php/php.ini
; This file is created automatically by the docker build
memory_limit = 2G
max_execution_time = 800
我做错了什么?下面是更多的细节,提前感谢
Docker项目
docker-compose.yml
php/Dockerfile
更新 我试着用下面的代码重新启动nginx,但没有成功
$ docker exec -it mymagento2docker_php_1 /bin/bash
# /etc/init.d/nginx restart
bash: /etc/init.d/nginx: No such file or directory
# service nginx restart
nginx: unrecognized service
# nginx -s reload
bash: nginx: command not found
# exit
$ docker restart mymagento2docker_nginx_1
mymagento2docker_nginx_1
$ docker exec -it mymagento2docker_nginx_1 /bin/bash
# /etc/init.d/nginx restart
Restarting nginx: nginxross in ~/my-magento2-docker
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
mymagento2docker_app_1 true Exit 0
mymagento2docker_data_1 docker-entrypoint.sh true Exit 0
mymagento2docker_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
mymagento2docker_nginx_1 nginx -g daemon off; Exit 0
mymagento2docker_php_1 php-fpm Up 9000/tcp
mymagento2docker_phpmyadmin_1 /run.sh phpmyadmin Up 0.0.0.0:8080->80/tcp
ross in ~/my-magento2-docker
$ docker-compose up -d
Starting mymagento2docker_app_1
Starting mymagento2docker_data_1
mymagento2docker_mysql_1 is up-to-date
mymagento2docker_phpmyadmin_1 is up-to-date
mymagento2docker_php_1 is up-to-date
Starting mymagento2docker_nginx_1
ross in ~/my-magento2-docker
$ docker exec -it mymagento2docker_nginx_1 /bin/bash
# service nginx restart
Restarting nginx: nginxross in ~/my-magento2-docker
$ docker-compose up -d
Starting mymagento2docker_app_1
Starting mymagento2docker_data_1
mymagento2docker_mysql_1 is up-to-date
mymagento2docker_phpmyadmin_1 is up-to-date
mymagento2docker_php_1 is up-to-date
Starting mymagento2docker_nginx_1
ross in ~/my-magento2-docker
$ docker exec -it mymagento2docker_nginx_1 /bin/bash
# nginx -s reload
2016/10/05 14:07:43 [notice] 12#12: signal process started
#
我认为您必须重新加载nginx配置。 我不知道您的php容器使用的是哪种操作系统,但请在容器内部尝试以下操作:
# /etc/init.d/nginx restart
# service nginx restart
# nginx -s reload
我的逻辑原因是,安装php(同时启动它),然后复制新配置。在docker-compose.yml文件中向php服务添加一个volumes:部分,将一个带有自定义.ini文件的本地目录映射到/usr/local/etc/php/conf.d,然后重新启动容器。该文件中的任何有效设置都将覆盖主php.ini文件中的设置。(顺便提一下,您可以对MySQL执行相同的操作,但对Nginx则不行)
这在我自己的项目中起作用:
php:
卷数:
-./localpath/custom.ini:/usr/local/etc/php/conf.d/custom.ini
发生了这样的事情:
-如果将php.ini从主机映射到容器,请确保在启动容器之前主机上必须存在文件(php.ini)。否则,容器将无法启动
-请检查docker是否能够读取您的php.ini文件(检查权限,有时docker以不同的用户身份运行,无法访问属于root的主机文件)
-每次更新php.ini时,都必须重新启动php fpm(进入容器并重新启动php fpm进行测试,不要重建容器),然后清除缓存(如果启用了opcache)我将把这些代码行放在哪里?在php/Dockerfile中?我猜没有“在他们之前”当然没有评论标签。在nginx容器中。否则,您可以尝试在php容器中使用:/etc/init.d/php7-fpm restart或服务php7-fpm restart重新启动php fpm,可能只是在没有版本号的情况下重新启动php fpm。这里是我的研究链接,感谢我尝试过,但没有任何成功,请参阅我的更新与此答案类似(足以不单独给出答案),我必须使用“apachectl restart”重新启动apache,我想详细说明您的答案,因为这对我的另一个问题有所帮助。我正在使用docker compose kill终止容器,我想知道为什么更改从未生效。因为docker compose缓存是更改的结果,所以在启动容器之前,请确保使用docker compose down强制取下容器,然后它将正确加载php.ini文件。希望这能帮我省下8个小时的头痛,谢谢!这正是我所需要的。那么,这是否只添加了您指定的设置?或者,如果您链接一个custom.ini,它将只放入您指定的设置中?另外,它可以称为custim.ini,还是应该称为php.ini?
FROM php:7.0-fpm
# Install dependencies
RUN apt-get update \
&& apt-get install -y \
cron \
libfreetype6-dev \
libicu-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
libxslt1-dev
# Configure the gd library
RUN docker-php-ext-configure \
gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
# Install required PHP extensions
RUN docker-php-ext-install \
gd \
intl \
mbstring \
mcrypt \
pdo_mysql \
xsl \
zip \
soap
# Install the 2.4 version of xdebug that's compatible with php7
RUN pecl install -o -f xdebug-2.4.0
COPY config/php.ini /usr/local/etc/php/
## php/config/php.ini ##
; This file is created automatically by the docker build
memory_limit = 2G
max_execution_time = 800
$ docker exec -it mymagento2docker_php_1 /bin/bash
# /etc/init.d/nginx restart
bash: /etc/init.d/nginx: No such file or directory
# service nginx restart
nginx: unrecognized service
# nginx -s reload
bash: nginx: command not found
# exit
$ docker restart mymagento2docker_nginx_1
mymagento2docker_nginx_1
$ docker exec -it mymagento2docker_nginx_1 /bin/bash
# /etc/init.d/nginx restart
Restarting nginx: nginxross in ~/my-magento2-docker
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
mymagento2docker_app_1 true Exit 0
mymagento2docker_data_1 docker-entrypoint.sh true Exit 0
mymagento2docker_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
mymagento2docker_nginx_1 nginx -g daemon off; Exit 0
mymagento2docker_php_1 php-fpm Up 9000/tcp
mymagento2docker_phpmyadmin_1 /run.sh phpmyadmin Up 0.0.0.0:8080->80/tcp
ross in ~/my-magento2-docker
$ docker-compose up -d
Starting mymagento2docker_app_1
Starting mymagento2docker_data_1
mymagento2docker_mysql_1 is up-to-date
mymagento2docker_phpmyadmin_1 is up-to-date
mymagento2docker_php_1 is up-to-date
Starting mymagento2docker_nginx_1
ross in ~/my-magento2-docker
$ docker exec -it mymagento2docker_nginx_1 /bin/bash
# service nginx restart
Restarting nginx: nginxross in ~/my-magento2-docker
$ docker-compose up -d
Starting mymagento2docker_app_1
Starting mymagento2docker_data_1
mymagento2docker_mysql_1 is up-to-date
mymagento2docker_phpmyadmin_1 is up-to-date
mymagento2docker_php_1 is up-to-date
Starting mymagento2docker_nginx_1
ross in ~/my-magento2-docker
$ docker exec -it mymagento2docker_nginx_1 /bin/bash
# nginx -s reload
2016/10/05 14:07:43 [notice] 12#12: signal process started
#
# /etc/init.d/nginx restart
# service nginx restart
# nginx -s reload