Django媒体文件404:Docker卷中视频无法访问(开发模式)
解决Django开发模式下Docker卷媒体文件404问题
1. 核对媒体配置与路由
先确认settings.py的媒体参数是否匹配:
MEDIA_URL = '/fergana_api/files/' MEDIA_ROOT = '/var/web/media/'
再检查项目根urls.py是否添加了媒体文件服务路由(仅开发模式生效):
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 你的其他业务URL规则 ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
确保DEBUG=True,因为static()函数仅在调试模式下启用媒体文件服务。
2. 验证URL路径匹配逻辑
请求URLhttp://127.0.0.1:8000/fergana_api/files/36/movies/movie.mp4中,/fergana_api/files/对应MEDIA_URL,剩余的36/movies/movie.mp4对应MEDIA_ROOT下的相对路径,和你确认的/var/web/media/36/movies/movie.mp4完全匹配,逻辑没问题,重点排查路由是否生效。
3. 检查Docker卷与文件权限
- 确认Docker卷挂载配置正确,比如
docker-compose.yml中是否有:
volumes: - ./本地媒体目录路径:/var/web/media
- 进入容器执行
ls -l /var/web/media/36/movies/movie.mp4,确认文件存在且Django进程有读取权限(比如文件权限设为644,或所属用户与Django运行用户一致)。
4. 排查路由优先级冲突
如果你的URL规则中有自定义的fergana_api/files/相关路由,可能会抢占媒体路由的匹配权。把static()生成的路由放在urlpatterns的最后,确保它能匹配剩余的媒体路径。
5. 重启Django服务
修改settings.py或urls.py后,必须重启Docker内的Django开发服务器,新的路由配置才会生效。
内容的提问来源于stack exchange,提问作者user11419808
相关产品推荐
相关产品推荐

