Docker phpmyadmin 忽略了我的 php.ini 配置
Posted
技术标签:
【中文标题】Docker phpmyadmin 忽略了我的 php.ini 配置【英文标题】:Docker phpmyadmin ignoring my php.ini config 【发布时间】:2018-11-10 06:30:57 【问题描述】:我用 apache、php7.0、mysql 构建了一个 docker-compose 环境,还添加了 phpmyadmin。
我尝试了很多次来包含我自己的 php.ini 文件,最后,我得到了 php 接受它,因为它显示在我的 index.php 中加载了 phpinfo()。
我需要加载一个超过 750Mb 的数据库,而我的 phpmyadmin 不允许我导入超过 512Mb 的数据库。
我尝试将 db 压缩到 60Mb,但是当我尝试导入它时,它需要很长时间并最终切断导入,因为它需要很长时间,导致我的 db 不完整。
即使设置了我的 php.ini 文件大小限制等等,phpmyadmin 也会忽略它。
这是我在 php.ini 中更改的内容:
upload_max_filesize = 1024M
post_max_size = 1024M
memory_limit = 1024M
max_execution_time = 300
我的 docker-compose.yml 是:
version: '3.3'
services:
php:
build: apache-php
ports:
- "80:80"
- "443:443"
volumes:
- ./apache-php/www:/var/www/html
links:
- mysql
- phpmyadmin
mysql:
image: mysql:5.7
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1347891743
- MYSQL_DATABASE=database
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
ports:
- "8080:80"
volumes:
- ./mysql:/var/lib/mysql
我还有一个 Dockerfile 来运行我的 php:
FROM php:7.0-apache
RUN docker-php-ext-install mysqli
COPY config/php.ini /usr/local/etc/php/
这是它在 phpmyadmin 中显示的内容。
非常感谢您的帮助
【问题讨论】:
你们回答得这么快...反正我编辑了帖子,我无意中删除了75Mb上的0。 没问题。如果这是您第一次开始时的负担,那么您应该查看***.com/questions/43880026/…。这允许您在创建容器时指定要运行的脚本。 好吧,我只想要一个持久数据库。我会运行 docker-compose 并开始处理我只会导入一次的数据库。 这能回答你的问题吗? Docker: PhpMyAdmin has an upload limit of 2048KiB 【参考方案1】:你可以试试:
在/usr/local/etc/php/
的phpmyadmin 容器中配置php.ini
这是在 .yml 中
phpmyadmin:
volumes:
- ./php-make/upload.ini:/usr/local/etc/php/php.ini
还有文件upload.ini
upload_max_filesize = 1280M
post_max_size = 1280M
根据需要更改任意点
我可以做到并成功
【讨论】:
【参考方案2】:简单的方法是使用环境变量。
在 phpmyadmin 容器中,如果您检查 php conf 文件,您可以看到文件 /usr/local/etc/php/conf.d/phpmyadmin-misc.ini
包含以下内容:
allow_url_fopen=Off
max_execution_time=$MAX_EXECUTION_TIME
max_input_vars=10000
memory_limit=$MEMORY_LIMIT
post_max_size=$UPLOAD_LIMIT
upload_max_filesize=$UPLOAD_LIMIT
所以您可以简单地使用环境覆盖该值
你的docker-composer.yml
变成了
version: '3.3'
services:
php:
build: apache-php
ports:
- "80:80"
- "443:443"
volumes:
- ./apache-php/www:/var/www/html
links:
- mysql
- phpmyadmin
mysql:
image: mysql:5.7
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1347891743
- MYSQL_DATABASE=database
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql
environment:
- PMA_HOST=mysql
- PMA_PORT=3306
- UPLOAD_LIMIT=1024M
- MEMORY_LIMIT=1024M
- MAX_EXECUTION_TIME=300
ports:
- "8080:80"
volumes:
- ./mysql:/var/lib/mysql
运行docker命令也是一样的:
docker run -e VARIABLE=VALUE ...
【讨论】:
我不得不做很多搜索才能在这里结束,我认为这是最正确的答案。使用 Docker 约定和配置比不断连接到容器并尝试编辑 ini 或其他配置文件要好得多。这立即解决了我的问题,非常感谢。【参考方案3】:试试这个: 访问您的 phpmyadmin docker 容器: docker exec -it [容器名称或者是] bash
在 /usr/local/etc/php 中创建一个 php.ini:
nano /usr/local/etc/php/php.ini
(nano 或 vi,取决于您喜欢的编辑器)
添加你需要的行,例如:
file_uploads = On
memory_limit = 6G
upload_max_filesize = 6G
post_max_size = 6G
max_execution_time = 6000
然后重新加载:服务 apache2 重新加载
这对我有用!
【讨论】:
【参考方案4】:根据我的经验,PhpMyAdmin 不是导入大型数据库的最佳方式。 因此,即使您设法增加 memory_limit,您仍然会遇到较长的处理时间。
最好提供初始化脚本并通过 docker-compose 将其链接到 /docker-entrypoint-initdb.d 文件夹。例如:
mysql:
image: mysql:5.7
volumes:
- ./my_directory_with_init_scripts:/docker-entrypoint-initdb.d
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1347891743
- MYSQL_DATABASE=database
从here 你可能会看到它扫描/docker-entrypoint-initdb.d 文件夹中的子文件(包括*.sql)并处理它们。因此,只需将您的 SQL 转储文件放入链接卷中即可。
如果您仍然需要增加 php memory_limit,那么您可能可以使用 /etc/phpmyadmin/config.user.inc.php 设置 PMA 特定设置。 PMA docs 和 PMA docker image readme 中的更多信息。
【讨论】:
我结束了直接连接到 mysql 容器的手动导入。我在您的解决方案之前尝试过,但我不太了解您的指示。在文件夹中创建一个脚本,当我执行 docker-compose 时,将执行一个搜索 *.sql 的脚本? 您需要将带有数据库的 sql 转储文件放在该文件夹中。您还应该检查它是否包含“CREATE database”查询。之后只需重建容器,一切都会自动运行。【参考方案5】:您可以在 docker 容器中配置文件“phpmyadmin-misc.ini”
-
检查合并目录。
docker inspect phpmyadmin
“MergedDir”:“/var/lib/docker/overlay2/e703e63ddf58c0decebd292eabaf8fe2c7eef49eafa390d7f7cc971f523fb0a8/merged”,
编辑文件
cd var/lib/docker/overlay2/e703e63ddf58c0decebd292eabaf8fe2c7eef49eafa390d7f7cc971f523fb0a8/merged vi usr/local/etc/php/conf.d/phpmyadmin-misc.ini添加 2 行
upload_max_filesize = 1024M
post_max_size = 1024M
-
重启 Docker 容器
docker restart phpmyadmin
【讨论】:
【参考方案6】:您可以将 UPLOAD_LIMIT 参数传递给您的 docker run 命令。 phpMyAdmin 容器将默认设置为 2mb。
你可以查看官方文档: https://hub.docker.com/_/phpmyadmin
【讨论】:
以上是关于Docker phpmyadmin 忽略了我的 php.ini 配置的主要内容,如果未能解决你的问题,请参考以下文章