[英]can't update php.ini file in Docker container
我正在嘗試使用 Nginx 和 PHP7 在 Docker 上設置 Magento2。
我已經按照PHP7 Docker image 的建議添加了一個自定義的 php.ini 文件。 我可以從 phpinfo.php 看到它正在加載我的 php.ini 文件,但我的更新都不在那里。
它應該是:
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-compose.yml
├── index.php
├── magento2
│ ├── [DIRECTORIES & FILES OMMITED]
│
├── nginx
│ ├── Dockerfile
│ ├── default.conf
│ └── nginx.conf
├── output.txt
├── php
├── Dockerfile
└── config
└── php.ini
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
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
我試過用下面的方法重新啟動 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
#
在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
我認為你必須重新加載nginx配置。 我不知道你的php容器使用哪個操作系統,但嘗試在容器內部的一些:
# /etc/init.d/nginx restart
# service nginx restart
# nginx -s reload
我的邏輯原因是,你安裝了php(並在同一時間啟動它),然后你復制新的配置。
發生了這種情況: - 如果將php.ini從主機映射到容器,請確保在啟動容器之前主機上必須存在文件(php.ini)。 否則,容器將無法啟動 - 請檢查docker是否能夠讀取您的php.ini文件(檢查權限,有時docker作為不同的用戶運行,無法訪問屬於root的主機文件) - 每次更新php時.ini,你必須重啟php-fpm(進入容器內部並重啟php-fpm進行測試,不要重建容器),並清除緩存(如果啟用opcache)
如果你正在使用類似wodby( docker4php
或docker4drupal
)或蘭多或試圖找到“為什么php.ini中不起作用”(像我)的答案,這些工具都是用自己的方式來配置傳遞到PHP
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.