Docker Compose中Django与NSFW容器跨容器访问媒体文件夹404问题
解决跨容器访问媒体文件夹的404问题
问题根源
- 路径映射不匹配:媒体文件实际存储在容器内的
/app/backend/media/temp/image.png,但Nginx配置中alias /app/media/指向了错误目录,导致文件查找失败。 - 端口不一致:Nginx配置监听8000端口,但Docker Compose中Nginx容器的端口映射是
8001:8001,端口不匹配导致请求无法正确到达。 - 访问路径错误:请求URL为
/media/image.png,但实际文件位于/media/temp/image.png路径下。
修复步骤
1. 修正Nginx配置
编辑config/nginx/nginx.conf,调整媒体路径和监听端口:
client_max_body_size 10M; upstream web { ip_hash; server app:8000; } server { location /media/ { autoindex on; # 修正为容器内正确的媒体文件路径 alias /app/backend/media/; } location / { proxy_pass http://web/; } # 与Docker Compose端口映射保持一致 listen 8001; server_name localhost; }
2. 校验Django媒体配置
确保backend/backend/settings.py中的媒体路径配置正确:
import os from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
同时在backend/backend/urls.py中添加媒体文件路由支持:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 已有的路由配置... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
3. 使用正确的访问路径
跨容器访问时,正确的文件URL应为:
http://nginx:8001/media/temp/image.png
宿主机外部访问时,使用:
http://localhost:8001/media/temp/image.png
4. 重启容器生效
执行以下命令重启所有容器,使配置更改生效:
docker-compose down docker-compose up --build
内容的提问来源于stack exchange,提问作者PietroPutelli
相关产品推荐
相关产品推荐

