You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中Django与NSFW容器跨容器访问媒体文件夹404问题

解决跨容器访问媒体文件夹的404问题

问题根源

  1. 路径映射不匹配:媒体文件实际存储在容器内的/app/backend/media/temp/image.png,但Nginx配置中alias /app/media/指向了错误目录,导致文件查找失败。
  2. 端口不一致:Nginx配置监听8000端口,但Docker Compose中Nginx容器的端口映射是8001:8001,端口不匹配导致请求无法正确到达。
  3. 访问路径错误:请求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:35:15