WordPress Docker镜像上传超2MB图片报PHP内存不足错误如何解决?
问题背景
使用WordPress Docker镜像搭建的站点,上传大于2MB的图片时出现PHP Fatal error: Out of memory报错,相关配置及已尝试的解决方案如下:
Dockerfile配置
FROM amd64/wordpress:latest COPY . /var/www/html COPY /config-staging /var/www/html COPY php.ini /usr/local/etc/php COPY php.ini /usr/local/etc/php/conf.d COPY uploads.ini /usr/local/etc/php/conf.d COPY wordpress.ini /usr/local/etc/php/conf.d COPY custom-php.ini /usr/local/etc/php/conf.d COPY custom.ini /usr/local/etc/php/conf.d COPY .user.ini /usr/local/etc/php/conf.d RUN chown -R nobody:nogroup /tmp RUN chown -R www-data:www-data /var/www/html ENV PORT 80 EXPOSE 80
测试使用的INI配置内容
file_uploads = On display_errors = Off max_execution_time = 30 max_input_time = 60 max_input_vars = 1000 memory_limit = 512M post_max_size = 512M session.gc_maxlifetime = 1440 session.save_path = "/tmp" upload_max_filesize = 512M zlib.output_compression = Off
报错截图

已尝试的解决方案
- 在.htaccess文件中添加配置:
php_value upload_max_filesize 512M、php_value memory_limit 512M - 在wp.config.php文件中添加配置:
define('WP_MEMORY_LIMIT', '512M');
可行解决方案
- 第一步先确认配置是否实际生效:在站点根目录新建
phpinfo.php文件,写入<?php phpinfo(); ?>,访问该页面查看加载的php.ini路径、memory_limit、upload_max_filesize、post_max_size的实际值,很多时候配置文件路径不对没有被加载,导致配置不生效。 - 调整WordPress后台内存限制:你只配置了前台使用的
WP_MEMORY_LIMIT,后台上传、处理文件时使用的是WP_MAX_MEMORY_LIMIT,需要在wp-config.php中新增define('WP_MAX_MEMORY_LIMIT', '512M');。 - 避免多配置文件冲突:你的Dockerfile中复制了多个ini文件到conf.d目录,容易出现配置覆盖问题,只保留一个命名为
99-custom.ini的自定义配置文件,将所有自定义PHP配置写入该文件,保证优先级最高,不会被默认配置覆盖。 - 检查Docker容器内存限制:容器本身如果被限制了内存上限,PHP配置的内存上限再高也没用,执行
docker inspect <容器名称/ID> | grep Memory查看容器内存限制,若小于512M,启动容器时添加--memory 1G参数分配足够内存。 - 确认配置文件权限:执行
docker exec <容器名称/ID> ls -l /usr/local/etc/php/conf.d/查看ini文件权限,保证www-data用户有读取权限,可在Dockerfile中新增RUN chmod 644 /usr/local/etc/php/conf.d/*.ini统一配置权限。 - 若使用Nginx代理站点,需要在Nginx server配置块中添加
client_max_body_size 512M;,避免请求被Nginx拦截。
内容的提问来源于stack exchange,提问作者Krutik Parikh
相关产品推荐
相关产品推荐

