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

在Azure部署Django Web App时遭遇Application error问题求助

Django应用部署Azure出现Application error的排查与修复

核心问题定位

你的配置存在端口不匹配的关键问题,Azure Web Apps需要明确容器监听的端口,当前配置里的端口设置混乱:

  • Dockerfile的CMD指定Django运行在8000端口,但settings.py硬编码了WEBSITES_PORT=80、PORT=9000,和实际服务端口不匹配,导致Azure流量无法正确转发到服务
  • 关于DOCKER_REGISTRY的设置是正确的,只要镜像推送成功、账号权限正常,这部分不会引发Application error

分步修复方案

1. 统一端口配置

修改settings.py

移除多余的端口硬编码,仅保留合法的主机白名单:

ALLOWED_HOSTS = ['.herokuapp.com', 'localhost', '127.0.0.1', 'shawjournal.azurewebsites.net']
# 删除WEBSITES_PORT和PORT的手动设置

修改Dockerfile

只暴露实际使用的端口,确保启动命令的端口一致:

# Pull base image
FROM python:3.8

# 仅暴露Django实际运行的8000端口
EXPOSE 8000

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /code

# Install dependencies
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system

# Copy project
COPY . /code/

# 保持服务绑定0.0.0.0,允许容器外部访问
CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]

修改docker-compose.yml(本地测试用)

保持和Dockerfile一致的端口映射:

version: '3.8'
services:
  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000

2. Azure环境配置调整

在Azure Web Apps的配置->应用程序设置中添加:

  • WEBSITES_PORT:设置为8000(和Django运行端口完全一致)
  • 确保容器启动命令与Dockerfile的CMD一致,无需额外修改

3. 额外排查要点

  • SQLite提示:Azure Web Apps文件系统是临时存储,重启后数据会丢失,生产环境建议切换到Azure Database for PostgreSQL/MySQL,但这不会直接导致当前的Application error
  • 查看日志:在Azure Portal的Web Apps->日志->日志流中查看具体报错信息,比如依赖安装失败、Django启动异常等,这是定位问题最直接的方式

验证步骤

  1. 本地测试:执行docker-compose up,访问localhost:8000确认应用正常运行
  2. 重新构建并推送镜像到你的Docker Registry
  3. 重启Azure Web Apps,等待部署完成后访问线上地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:55:10