web-dev-qa-db-ja.com

Dockerコンテナのphp.iniファイルを更新できません

NginxとPHP7でDockerにMagento2を設定しようとしています。

PHP7 Docker image で推奨されているカスタムphp.iniファイルを追加しました。 phpinfo.phpから、php.iniファイルが読み込まれていることがわかりますが、更新はありません。 enter image description hereenter image description hereenter image description here

そのはず:

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
├── index.php
├── magento2
│   ├── [DIRECTORIES & FILES OMMITED]
│                   
├── nginx
│   ├── Dockerfile
│   ├── default.conf
│   └── nginx.conf
├── output.txt
├── php
    ├── Dockerfile
    └── config
        └── php.ini

docker-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    

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/

## php/config/php.ini ##
; This file is created automatically by the docker build

memory_limit = 2G
max_execution_time = 800

更新

以下でngi​​nxを再起動しようとしましたが、うまくいきませんでした。

$ 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
# 
20
Holly

docker-compose.ymlファイルのphpサービスにvolumes:セクションを追加し、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

29
otravers

nginxの設定をリロードする必要があると思います。私はあなたのPHPコンテナがどのOSを使用しているか知りませんが、コンテナの内部でこれらのいくつかを試してください:

# /etc/init.d/nginx restart

# service nginx restart

# nginx -s reload

私の論理的な理由は、phpをインストールし(同時に起動する)、結局新しい設定をコピーすることです。

0
Gabbax0r

これが何が起こったかです:-ホストからコンテナにphp.iniをマップする場合、コンテナを起動する前にファイル(php.ini)がホストに存在することを確認してください。そうでない場合、コンテナは起動しません-dockerがphp.iniファイルを読み取れるかどうかを確認してください(許可を確認してください。dockerは別のユーザーとして実行され、rootに属するホストファイルにアクセスできません)-phpを更新するたびに.ini、php-fpmを再起動する必要があります(コンテナ内に移動してテストするにはphp-fpmを再起動し、コンテナを再構築しないでください)、キャッシュをクリアします(opcacheを有効にする場合)

0
Dylan B