kann die php.ini-Datei im Docker-Container nicht aktualisieren

Lesezeit: 5 Minuten

Benutzer-Avatar
Stechpalme

Ich versuche, Magento2 auf Docker mit Nginx & PHP7 einzurichten.

Ich habe eine benutzerdefinierte php.ini-Datei hinzugefügt, wie von empfohlen PHP7-Docker-Image. Ich kann von phpinfo.php sehen, dass es meine php.ini-Datei lädt, aber keine meiner Updates dort sind.
Geben Sie hier die Bildbeschreibung ein
Geben Sie hier die Bildbeschreibung ein
Geben Sie hier die Bildbeschreibung ein

Es sollte sein:

memory_limit = 2G
max_execution_time = 800

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

$ 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? Unten sind einige weitere 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 versucht, nginx mit dem Folgenden neu zu starten, 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
# 

Benutzer-Avatar
otravers

Füge hinzu ein Volumen: Abschnitt zu Ihnen php Dienst im docker-compose.yml Datei ein lokales Verzeichnis mit einer custom.ini Datei zu /usr/local/etc/php/conf.d, und starten Sie Ihren Container neu. Alle gültigen Einstellungen in dieser Datei überschreiben die aus der Hauptdatei php.ini. (Übrigens können Sie dasselbe 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

  • Ich möchte auf Ihre Antwort näher eingehen, da dies bei einer meiner anderen Fragen geholfen hat. Ich habe docker-compose kill verwendet, um die Container zu beenden, und mich gefragt, warum die Änderungen nie wirksam wurden. Da docker-compose cache die Ergebnisse von Änderungen ist, stellen Sie sicher, dass Sie docker-compose down verwenden, um die Container zwangsweise herunterzufahren, bevor Sie sie starten, nachdem Sie dies getan haben, und dann wird die php.ini-Datei korrekt geladen. Hoffentlich erspart das jemandem 8 Stunden Kopfschmerzen, die mir das verursacht hat.

    – Josef Astrahan

    18. Januar 2017 um 4:25 Uhr

  • Vielen Dank! Das war genau das, was ich brauchte.

    – JD-

    18. Januar 2021 um 19:50 Uhr

  • Werden also nur die von Ihnen angegebenen Einstellungen hinzugefügt? Oder werden nur Einstellungen eingefügt, die Sie angeben, wenn Sie eine custom.ini verknüpfen? Kann es auch custim.ini heißen oder sollte es php.ini heißen?

    – Techcase

    5. Mai 2021 um 17:03 Uhr

Ich denke, Sie müssen die Nginx-Konfiguration neu laden. Ich weiß nicht, welches Betriebssystem Ihr PHP-Container verwendet, aber versuchen Sie innerhalb des Containers einige davon:

# /etc/init.d/nginx restart

# service nginx restart

# nginx -s reload

mein logischer grund ist, dass du php installierst ( und gleichzeitig startest ) und schließlich die neue config kopierst.

  • Wo würde ich diese Codezeilen einfügen? In der php/Dockerdatei? Ich vermute ohne das # vor ihnen

    – Stechpalme

    5. Oktober 2016 um 13:58 Uhr

  • natürlich ohne Kommentar-Hashtag. in Ihrem Nginx-Container. Andernfalls können Sie versuchen, Ihr php-fpm innerhalb des php-Containers neu zu starten mit: /etc/init.d/php7-fpm restart oder service php7-fpm restart vielleicht nur php-fpm restart ohne die Versionsnummer. hier mein Forschungslink cyberciti.biz/faq/unix-linux-restart-php-service-command

    – Gabbax0r

    5. Oktober 2016 um 14:04 Uhr

  • Danke, das habe ich versucht, aber ohne Erfolg, siehe mein Update

    – Stechpalme

    5. Oktober 2016 um 14:10 Uhr

  • Ähnlich wie bei dieser Antwort (genug, um keine separate Antwort zu geben), musste ich Apache mit “apachectl restart” neu starten.

    – Amalgowinus

    16. August 2018 um 19:39 Uhr


Folgendes ist passiert: – Wenn Sie die php.ini vom Host auf den Container abbilden, stellen Sie sicher, dass die Datei (php.ini) auf dem Host vorhanden sein muss, bevor Sie den Container starten. Andernfalls wird der Container nicht gestartet – Bitte überprüfen Sie, ob Docker Ihre php.ini-Datei lesen konnte (überprüfen Sie die Berechtigung, manchmal läuft Docker unter einem anderen Benutzer und kann nicht auf die Host-Datei zugreifen, die zu root gehört) – Jedes Mal, wenn Sie php aktualisieren .ini müssen Sie php-fpm neu starten (in den Container gehen und php-fpm zum Testen neu starten, Container nicht neu erstellen) und den Cache leeren (wenn Sie opcache aktivieren)

1229550cookie-checkkann die php.ini-Datei im Docker-Container nicht aktualisieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy