直接改环境变量无效,因phpmyadmin官方docker镜像不解析php_upload_max_filesize等变量;必须挂载自定义upload.ini至/usr/local/etc/php/conf.d/并设upload_max_filesize、post_max_size等值,同时apache需配置limitrequestbody 0,且重启容器方可生效。
直接改环境变量没用,phpmyadmin 官方 docker 镜像根本不读 php_upload_max_filesize 这类变量。真正起作用的是 php 的运行时配置,必须挂载自定义 .ini 文件,并且要同步处理 apache 层限制。
为什么改环境变量完全无效
官方镜像 phpmyadmin/phpmyadmin 是基于 Apache + PHP 的静态构建,没有内置环境变量转 PHP ini 的逻辑。你设的 PHP_UPLOAD_MAX_FILESIZE=512M 在容器里根本不会写入任何配置文件,php -i 也查不到它。
- 所有上传限制最终由
upload_max_filesize和post_max_size决定,两者取小值 -
phpMyAdmin页面上显示的“200 MB”是前端硬编码的提示,不是真实限制 - 即使改对了 PHP 配置,Apache 的
LimitRequestBody也可能拦截请求,报 400 错误
必须挂载 .ini 文件到 /usr/local/etc/php/conf.d/
Docker 启动时用 -v 挂载一个自定义 upload.ini,PHP 会自动加载该目录下所有 .ini 文件(按字母序),比直接改 php.ini 更安全,避免被镜像更新覆盖。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 新建本地文件
upload.ini,内容如下:
upload_max_filesize = 512M post_max_size = 512M max_execution_time = 600 max_input_time = 600 memory_limit = 1G
- 启动容器时挂载:
docker run -v /path/to/upload.ini:/usr/local/etc/php/conf.d/upload.ini ... phpmyadmin/phpmyadmin - 验证是否生效:进容器执行
php -i | grep -E "upload_max_filesize|post_max_size",输出应为你的设定值
Apache 容器还要额外加 LimitRequestBody 0
默认 Apache 配置中 LimitRequestBody 是 0(不限),但某些定制镜像或前置反向代理(如 Nginx)可能重写了这个值。如果 PHP 配置已生效,上传仍失败并返回 400,大概率是 Apache 拦截了。
- 进容器检查:
apache2ctl -M | grep rewrite确保rewrite_module已加载(部分配置依赖它) - 推荐方式:在挂载的 Apache 配置片段(如
/etc/apache2/conf-available/phpmyadmin.conf)末尾加一行:LimitRequestBody 0 - 不推荐用
.htaccess:Docker 官方镜像默认禁用AllowOverride,.htaccess不会被读取
别信页面显示,用真实文件验证
phpMyAdmin 导入页右上角写的“最大上传:200 MB”只是前端 JS 硬写死的数字,和后端实际限制无关。真正生效与否,只看两件事:
- 上传一个略超原限制的文件(比如原为 2M,就试 3MB 的 SQL),看错误是 PHP 报的 “file size exceeded”,还是 Apache 报的 400 Bad Request
- MySQL 服务端也有自己的
max_allowed_packet限制,大 SQL 导入中途卡住、报错 “Got a packet bigger than ‘max_allowed_packet’ bytes”,说明问题已转移到 MySQL 层,和 phpMyAdmin 无关 - 改完配置后必须重启容器——挂载的
.ini文件只在 PHP 启动时加载一次,热重载不生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










