uWSGI+Docker部署Django时静态文件404的解决方法求助
解决Django+uWSGI+Docker部署中静态文件404的问题
以下是针对性的排查和修复方案:
1. 在Docker构建阶段执行collectstatic
你的Dockerfile未包含静态文件收集步骤,即便本地执行过collectstatic,也无法保证镜像内的static目录包含完整的静态资源(比如Django Admin的样式文件)。修改Dockerfile,在复制项目文件后添加收集命令:
# Copy project files COPY . /app/ # 收集静态文件(--noinput跳过交互确认) RUN python manage.py collectstatic --noinput # Expose the port the app runs on EXPOSE 8000
2. 验证uWSGI静态映射路径的一致性
- 进入容器执行
ls -l /app/static,确认目录下存在admin子目录及对应的css、js文件 - 检查Django配置中的
STATIC_URL,如果settings.py里STATIC_URL不是/static/,需同步修改uWSGI的static-map前缀。例如STATIC_URL = '/staticfiles/'时,uwsgi.ini要改成static-map = /staticfiles=/app/static
3. 调整uWSGI启动参数的加载顺序
uWSGI参数加载顺序会影响配置生效,建议将所有核心配置移到uwsgi.ini中,避免命令行参数和配置文件冲突:
修改uwsgi.ini:
[uwsgi] http = 0.0.0.0:8000 module = yt_automation.wsgi:application static-map = /static=/app/static static-expires = /* 7776000 offload-threads = %k
然后Dockerfile的启动命令简化为:
CMD ["uwsgi", "--ini", "uwsgi.ini"]
4. 确认STATIC_ROOT路径准确性
进入容器执行python manage.py shell,运行以下代码验证路径:
import os from django.conf import settings print(settings.BASE_DIR) print(settings.STATIC_ROOT)
确保输出的STATIC_ROOT为/app/static,与uWSGI配置的映射路径完全一致。
内容的提问来源于stack exchange,提问作者Akhil Garg
相关产品推荐
相关产品推荐

