Docker+Wordpress+Nginx环境上传图片显示空白访问返回404排查求助
你的问题根因是WordPress容器和Nginx容器没有共享网站根目录存储,同时存在Nginx规则缺失、目录权限可能不正确的问题,按以下步骤修复:
1. 修复docker-compose卷挂载配置
你当前配置中,Nginx容器挂载了wordpress命名卷到/var/www/html,但WordPress容器并没有挂载该命名卷,两个容器的网站根目录完全独立:WordPress写入的文件存在自身容器的临时文件系统中,Nginx完全无法访问,自然返回404。
修改wordpress服务的volumes配置,添加共享根目录挂载:
services: wordpress: # 其余原有配置保持不变 volumes: - wordpress:/var/www/html # 新增这行,和Nginx的根目录挂载保持一致 - ./theme-folder:/var/www/html/wp-content/themes/theme-folder
如果需要在本地宿主机直接查看上传的图片,可额外添加上传目录的本地挂载:
volumes: - wordpress:/var/www/html - ./wp-uploads:/var/www/html/wp-content/uploads # 新增,本地wp-uploads目录和容器内上传目录映射 - ./theme-folder:/var/www/html/wp-content/themes/theme-folder
2. 修复Nginx配置
你当前443端口的Server块缺少默认路由规则,静态资源无法正常匹配:
修改你的nginx.conf的443 Server块,添加以下配置:
server { listen 443 ssl; listen [::]:443 ssl; server_name website; root /var/www/html; index index.php index.html index.htm; ssl_certificate /etc/letsencrypt/live/website/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/website/privkey.pem; # 新增默认路由规则 location / { try_files $uri $uri/ /index.php?$args; } # 静态资源规则放在PHP规则之前,优先匹配 location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ { expires max; # 排查阶段先注释掉log_not_found off,方便定位问题 # log_not_found off; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass wordpress:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
3. 修复目录权限
WordPress镜像默认以www-data用户运行PHP-FPM,需要确保上传目录的所有者权限正确:
进入WordPress容器执行权限修改命令:
docker exec -it <你的WordPress容器名> chown -R www-data:www-data /var/www/html/wp-content
4. 验证生效
修改完成后重启所有容器:
docker-compose down && docker-compose up -d
之后尝试上传图片,先进入WordPress容器查看/var/www/html/wp-content/uploads/下是否生成对应文件,再进入Nginx容器查看同一路径是否存在相同文件,确认共享正常后即可正常访问图片。
内容的提问来源于stack exchange,提问作者motizukilucas
相关产品推荐
相关产品推荐

