Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

can't update php.ini file in Docker container

I'm trying to set Magento2 on Docker with Nginx & PHP7.

I've added a custom php.ini file as recommended by the PHP7 Docker image. I can see from phpinfo.php that it's loading my php.ini file but none of my updates are there. enter image description here enter image description here enter image description here

It should be:

memory_limit = 2G max_execution_time = 800 

I've checked the PHP container and I can see the php.ini file is there with the correct settings, or so I think?

$ 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 

What am I doing wrong? Below are some more details, thanks in advance!


Docker Project

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

UPDATE

I've tried restarting nginx with the below, but it did not work.

$ 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 #  
like image 985
Holly Avatar asked Oct 05 '16 13:10

Holly


People also ask

Where is PHP ini in docker PHP?

Unfortunately, PHP is looking for the default php. ini file at the default path. Files named ini-development or ini-production are not accepted. Other ini files can be loaded from a different location: /usr/local/etc/php/conf.

What is the difference between PHP ini-development and PHP ini-production?

ini-development contains settings suitable for development environment and php. ini-production contains settings suitable for production environment. As per your requirement, you need take backup of anyone of the file and rename that file to php. ini .


2 Answers

Add a volumes: section to your php service in the docker-compose.yml file, map a local directory with a custom.ini file to /usr/local/etc/php/conf.d, and restart your container. Whatever valid settings in that file will override those from the main php.ini file. (Incidentally you can do the same with MySQL but not with Nginx).

This works in my own project:

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

like image 144
otravers Avatar answered Oct 08 '22 13:10

otravers


i think you have to reload the nginx config. i dont know which OS your php container uses, but try inside of the container some of these:

# /etc/init.d/nginx restart  # service nginx restart  # nginx -s reload 

my logical reason is, that you install php ( and start it at the same time ) and after all you copy the new config.

like image 24
Gabbax0r Avatar answered Oct 08 '22 13:10

Gabbax0r