it-swarm.com.de

die php.ini-Datei kann nicht im Docker-Container aktualisiert werden

Ich versuche, Magento2 mit Nginx & PHP7 auf Docker zu setzen.

Ich habe eine benutzerdefinierte php.ini-Datei hinzugefügt, wie von PHP7 Docker image empfohlen. Ich kann von phpinfo.php sehen, dass es meine php.ini-Datei lädt, aber keines meiner Updates ist da .  enter image description here  enter image description here  enter image description here

Es sollte sein:

memory_limit = 2G
max_execution_time = 800

Ich habe den PHP -Container überprüft und ich kann sehen, dass die php.ini-Datei dort mit den richtigen Einstellungen vorhanden ist.

$ 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

Was mache ich falsch? Nachfolgend einige Details, danke im Voraus!


Docker-Projekt

.
├── 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

AKTUALISIEREN

Ich habe den Neustart von Nginx mit dem folgenden Befehl versucht, aber es hat nicht funktioniert.

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

Fügen Sie einen volume: section zu Ihrem php service in der docker-compose.yml - Datei hinzu, ordnen Sie ein lokales Verzeichnis mit einer custom.ini - Datei zu/usr/local/etc/php/conf.d , und starten Sie den Container neu. Alle gültigen Einstellungen in dieser Datei überschreiben die Einstellungen in der php.ini-Hauptdatei. (Das können Sie übrigens mit MySQL tun, aber nicht mit Nginx).

Das funktioniert in meinem eigenen Projekt:

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

23
otravers

ich denke, Sie müssen die Nginx-Konfiguration neu laden. __ Ich weiß nicht, welches Betriebssystem Ihr PHP-Container verwendet, aber probieren Sie im Container einige davon aus:

# /etc/init.d/nginx restart

# service nginx restart

# nginx -s reload

mein logischer Grund ist, dass Sie php installieren (und gleichzeitig starten) und schließlich die neue config kopieren.

0
Gabbax0r

Folgendes ist passiert: - Wenn Sie die php.ini vom Host zum Container zuordnen, müssen Sie sicherstellen, dass die Datei (php.ini) auf dem Host vorhanden ist, bevor Sie den Container starten. Andernfalls startet der Container nicht - Bitte überprüfen Sie, ob docker Ihre php.ini-Datei lesen konnte (überprüfen Sie die Berechtigung, manchmal wird docker als anderer Benutzer ausgeführt und kann nicht auf die Host-Datei zugreifen, die zu root gehört) - Jedes Mal, wenn Sie php aktualisieren .ini, Sie müssen PHP-FPM neu starten (gehen Sie in den Container und starten Sie PHP-FPM neu, um zu testen, erstellen Sie den Container nicht neu) und den Cache leeren (wenn Sie Opcache aktivieren)

0
Dylan B