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

基于Docker的Django应用部署至Azure容器Web App后Nginx无法找到静态文件

问题根因排查&解决方案

1. 基础配置校验

  • 先确认Django动态请求可以正常访问:如果应用非静态的页面/接口能正常打开,说明容器间通信正常,无需额外开放内部端口,Web App for Containers默认同一compose定义的容器都在同一个内网网段可互通。
  • 检查Azure应用设置中是否配置了WEBSITES_PORT = 80:Azure默认会把外部流量转发到这个指定端口,要和你nginx配置的监听端口保持一致。

2. 最常见问题:静态文件目录未在两个容器间共享

本地docker compose运行时你大概率是在compose文件中定义了本地共享卷,同时挂载到Django容器和Nginx容器的静态资源路径,但是部署到Azure时如果没有正确配置共享卷,Nginx容器本身的文件系统里不存在对应静态文件,自然会返回404。

修复方法:修改docker-compose.yml添加共享卷定义

version: '3.8'

services:
  web:
    # 保留你的Django容器原有配置
    volumes:
      - static_volume:/home/app/web/static
      - media_volume:/home/app/web/media
  nginx:
    # 保留你的Nginx容器原有配置
    volumes:
      - static_volume:/home/app/web/static
      - media_volume:/home/app/web/media
    depends_on:
      - web

volumes:
  static_volume:
  media_volume:

Azure Web App for Containers原生支持compose中的命名卷(named volume),两个容器会共享该卷的内容,保证Nginx能读取到Django收集的静态文件。

3. 确认静态文件收集逻辑正常

部署到Azure时要保证Django容器启动时执行了python manage.py collectstatic --noinput命令,把静态资源正确输出到/home/app/web/static/目录下,你可以把该命令加到Django容器的启动脚本或者compose的command配置中。

4. 路径权限问题修复

如果上述配置都完成后还是404,大概率是权限问题:Azure容器默认运行用户可能没有读取静态目录的权限,你可以在Django容器的启动脚本里添加权限配置:

chmod -R 755 /home/app/web/static /home/app/web/media

5. Nginx配置优化(可选)

你可以把静态资源的location配置调整为以下形式,稳定性更高:

location /static/ {
    root /home/app/web;
    try_files $uri =404;
}

location /media/ {
    root /home/app/web;
    try_files $uri =404;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:36:01