在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启动异常等,这是定位问题最直接的方式
验证步骤
- 本地测试:执行
docker-compose up,访问localhost:8000确认应用正常运行 - 重新构建并推送镜像到你的Docker Registry
- 重启Azure Web Apps,等待部署完成后访问线上地址
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

