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

部署Django到Azure App Service时Docker容器端口8000无响应报错求助

问题排查及解决方案

核心问题1:挂载卷覆盖容器内代码

你docker-compose.yml里配置的volumes: - .:/image_service是本地开发时用于热重载的配置,部署到Azure App Service时,远程运行环境的当前目录不存在你的项目代码,挂载后会直接覆盖镜像中内置的项目代码,导致Django进程根本无法正常启动,自然无法响应端口探测。
修复方法:删除docker-compose.yml中的volumes配置段。

核心问题2:端口配置冲突

你在Azure门户中同时配置了PORT 80和WEBSITES_PORT 8000,Azure App Service的健康检查逻辑会优先读取PORT环境变量的取值作为探测端口,而你容器内的Django服务实际监听的是8000端口,导致探测目标和实际服务端口不匹配。
修复方法:删除Azure配置中的PORT 80项,仅保留WEBSITES_PORT 8000即可。

可选优化(强烈建议修改)

Django自带的runserver是开发调试用服务器,性能差、稳定性低,不适合生产环境使用,建议替换为生产级WSGI服务器Gunicorn:

  1. 在项目依赖文件中添加gunicorn
  2. 修改docker-compose.yml中的command配置:
command: bash -c "python projectile/manage.py makemigrations && python projectile/manage.py migrate && gunicorn projectile.wsgi:application --bind 0.0.0.0:8000 --workers 2"

修改后Docker Compose参考配置

version: '3'

services:
  web:
    build: .
    command: bash -c "python projectile/manage.py makemigrations && python projectile/manage.py migrate && gunicorn projectile.wsgi:application --bind 0.0.0.0:8000 --workers 2"
    container_name: image_service
    ports:
      - "8000:8000"

补充检查项

确认Django项目settings.py中的ALLOWED_HOSTS配置包含你的Azure App Service域名(比如xxx.azurewebsites.net),或者临时设为ALLOWED_HOSTS = ["*"]测试,避免Django拦截请求导致探测失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:24:04