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

Docker-Compose部署Django项目:Nginx与Gunicorn静态文件缺失问题

Django静态文件无法加载问题修复

问题根源

  1. 静态文件收集路径与共享卷不匹配:
    Django容器中collectstatic将文件写入/app/static(由settings.py里STATIC_ROOT = os.path.join(BASE_DIR, 'static')决定,BASE_DIR对应容器内的/app目录),但docker-compose中挂载的共享卷是static:/static,导致收集的静态文件并未进入共享卷,nginx访问/static/路径时自然找不到文件。
  2. 请求 fallback 到Gunicorn:
    由于共享卷内无静态文件,nginx无法返回资源,请求会被转发到Gunicorn,因此Gunicorn日志出现Not Found。

修复步骤

1. 修改Django settings.py

将STATIC_ROOT直接指向容器内的共享卷路径:

STATIC_ROOT = '/static'
STATIC_URL = '/static/'

修改后,collectstatic会将静态文件直接写入/static目录(即共享卷挂载点),确保nginx能访问到。

2. 保持docker-compose卷挂载配置

当前docker-compose的卷配置是正确的,无需修改:

marathon_gunicorn:
  volumes:
    - static:/static
nginx:
  volumes:
    - static:/static

确保两个容器共享同一个static卷。

3. 重建并重启容器

执行以下命令清除旧卷并重新部署:

docker-compose down -v
docker-compose build
docker-compose up -d

-v参数会删除旧的static卷,避免残留的路径问题影响新部署。

验证方法

  • 进入Gunicorn容器检查静态文件是否存在:
    docker exec -it <你的gunicorn容器名> ls /static
    
    若能看到静态文件目录(如css、js),说明收集成功。
  • 访问页面查看静态资源是否正常加载,同时检查nginx和Gunicorn日志是否再出现错误。

内容的提问来源于stack exchange,提问作者Thapelo Chimfwembe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:06:17