无法在Docker容器中更新php.ini文件

Hol*_*lly 22 php nginx php-ini docker dockerfile

我正试图用Nginx和PHP7在Docker上设置Magento2.

我已经按照PHP7 Docker镜像的建议添加了一个自定义的php.ini文件.我可以从phpinfo.php看到它正在加载我的php.ini文件,但我的更新都没有. 在此输入图像描述 在此输入图像描述 在此输入图像描述

它应该是:

memory_limit = 2G
max_execution_time = 800
Run Code Online (Sandbox Code Playgroud)

我检查了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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?以下是一些更多细节,提前感谢!


Docker项目

.
??? docker-compose.yml
??? index.php
??? magento2
?   ??? [DIRECTORIES & FILES OMMITED]
?                   
??? nginx
?   ??? Dockerfile
?   ??? default.conf
?   ??? nginx.conf
??? output.txt
??? php
    ??? Dockerfile
    ??? config
        ??? php.ini
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

nginx:
    build: ./nginx/
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - app

php:
    build: ./php/
    expose:
        - 9000
    links:
        - mysql
    volumes_from:
        - app

app:
    image: php:7.0-fpm
    volumes:
        - ./magento2:/var/www/html
    command: "true"

mysql:
    image: mysql:latest
    volumes_from:
        - data
    ports:
        - "3306:3306"        
    environment:
        MYSQL_ROOT_PASSWORD: mage2
        MYSQL_DATABASE: mage2
        MYSQL_USER: mage2
        MYSQL_PASSWORD: mage2 

data:
    image: mysql:latest
    volumes:
        - /var/lib/mysql
    command: "true"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql    
Run Code Online (Sandbox Code Playgroud)

PHP/Dockerfile

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/
Run Code Online (Sandbox Code Playgroud)
## php/config/php.ini ##
; This file is created automatically by the docker build

memory_limit = 2G
max_execution_time = 800
Run Code Online (Sandbox Code Playgroud)

UPDATE

我尝试用下面的方法重新启动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
# 
Run Code Online (Sandbox Code Playgroud)

otr*_*ers 31

docker-compose.yml文件中向您的php服务添加一个卷:部分,将一个带有custom.ini文件的本地目录映射到/usr/local/etc/php/conf.d,然后重新启动容器.该文件中的任何有效设置都将覆盖主php.ini文件中的设置.(顺便说一句,你可以用MySQL做同样的事情但不能用Nginx做同样的事情).

这适用于我自己的项目:

php: volumes: - ./localpath/custom.ini:/usr/local/etc/php/conf.d/custom.ini

  • 我想详细说明你的答案,因为这有助于我的其他一个问题.我正在使用docker-compose kill来杀死容器,并且想知道为什么这些更改从未生效.因为docker-compose缓存是来自更改的结果,所以请确保在执行此操作之前使用docker-compose down强制取下容器,然后启动它们,然后它将正确加载php.ini文件.希望这可以节省8个小时的头痛,这导致了我. (8认同)
  • 那么,这是否只添加您指定的设置?或者如果您链接 custom.ini,它只会放入您指定的设置吗?另外,它可以称为 cusstim.ini 还是应该称为 php.ini? (2认同)

Gab*_*x0r 1

我认为你必须重新加载 nginx 配置。我不知道您的 php 容器使用哪个操作系统,但请在容器内部尝试其中一些:

# /etc/init.d/nginx restart

# service nginx restart

# nginx -s reload
Run Code Online (Sandbox Code Playgroud)

我的逻辑原因是,您安装 php (并同时启动它),毕竟您复制了新配置。