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

Docker部署Django应用时Nginx无法找到静态文件的问题求助

解决Docker部署Django时Nginx无法找到静态文件的问题

问题根源梳理

  1. Django静态/媒体文件配置错误,使用了非官方配置项且路径不规范
  2. Docker卷映射不匹配,导致Nginx无法访问Django收集的静态文件
  3. Nginx静态文件路径配置错误
  4. 未执行collectstatic将静态文件同步到指定目录

分步修正方案

1. 修正Django settings.py配置

替换错误的静态/媒体文件配置,使用绝对路径避免Docker环境下的相对路径问题:

STATIC_URL = '/static/'
MEDIA_URL = '/qr_codes/'  # 改为独立路径,避免与STATIC_URL路径叠加

# 使用绝对路径,确保Docker容器内路径准确
STATIC_ROOT = '/app/vol/web/static'
MEDIA_ROOT = '/app/vol/web/qr_codes'  # 替换错误的STATIC_MEDIA配置项

2. 调整docker-compose卷映射

让Django容器与Nginx容器共享静态文件卷,修正路径匹配问题:

services:
  app:
    build:
      context: .
    volumes:
      - static:/vol/web/static  # 用共享卷替换本地目录挂载,确保静态文件能被Nginx访问
      - ./qr_codes:/vol/web/qr_codes
  
  proxy:
    build:
      context: ./nginx
    volumes:
      - static:/vol/static  # 挂载共享卷到Nginx容器的指定目录
      - ./qr_codes:/vol/qr_codes  # 挂载媒体文件目录(可选,若需Nginx直接处理媒体文件)
    ports:
      - "8080:8080"
    depends_on:
      - app

3. 修正Nginx default.conf配置

调整静态文件的路径指向,匹配Nginx容器内的挂载目录:

server{
    listen 8080;

    location /static/ {  # 末尾加/,避免路径拼接错误
        alias /vol/static/;  # 指向Nginx容器内的静态文件目录
        expires 30d;  # 可选,添加静态文件缓存优化
    }

    # 若保留媒体文件原访问路径,可添加此配置
    # location /static/qr_codes/ {
    #     alias /vol/qr_codes/;
    # }

    # 若使用独立的媒体文件路径,添加此配置
    location /qr_codes/ {
        alias /vol/qr_codes/;
    }

    location /{
        uwsgi_pass app:8000;
        include /etc/nginx/uwsgi_params;
    }
}

4. 确保启动时执行collectstatic

在Django的entrypoint.sh中添加静态文件收集命令,确保容器启动时将静态文件同步到STATIC_ROOT:

#!/bin/sh

# 收集静态文件到指定目录,--noinput避免交互确认
python manage.py collectstatic --noinput

# 启动uWSGI服务(根据你的实际启动命令调整)
uwsgi --socket :8000 --master --enable-threads --module inventory.wsgi

5. 重启服务验证

# 停止现有容器
docker-compose -f docker-compose-deploy.yaml down

# 重新构建并启动服务
docker-compose -f docker-compose-deploy.yaml up --build

查看app容器日志确认collectstatic执行成功,再访问页面验证静态文件是否正常加载。

内容的提问来源于stack exchange,提问作者Jacob Mutale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:01:10