can';t更新Docker容器中的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 #

我正试图用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 
# 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