Docker化Django应用部署Azure App Service失败求助
问题排查与解决:Docker化Django应用部署Azure App Service失败
核心问题定位
从日志能看到两个关键矛盾信息:
- Django应用实际启动在
http://0.0.0.0:8000/ - Azure报错:
Container myapp_0_aaaaa didn't respond to HTTP pings on port: 3000
问题根源是:你的Dockerfile声明暴露3000端口,但容器内的Django服务实际运行在8000端口,Azure App Service会默认检测容器EXPOSE的端口是否能正常响应,端口不匹配导致启动失败。
解决步骤
1. 修正Dockerfile的端口声明
修改Dockerfile中的EXPOSE指令,改为Django实际运行的8000端口:
FROM python:3.8.3-slim ENV PYTHONUNBUFFERED=1 WORKDIR /app RUN apk update && apk add --no-cache gcc musl-dev postgresql-dev python3-dev libffi-dev freetype-dev libxml2-dev libxslt-dev build-base && pip install --upgrade pip psycopg2-binary COPY ./requirements.txt ./ RUN pip install -r requirements.txt COPY ./ ./ # 修正为实际运行的端口 EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
2. 重新构建并推送镜像
执行以下命令重新构建镜像,推送到Azure容器注册表:
docker build -t myapp.azurecr.io/myapp:latest . docker push myapp.azurecr.io/myapp:latest
3. 确认Azure App Service端口配置(可选)
进入Azure App Service后台:
- 导航到「配置」>「常规设置」
- 确保「端口」字段设置为
8000,与容器内部端口一致
额外建议
- 生产环境优化:当前使用的
runserver是Django开发服务器,仅适合开发场景。生产环境建议改用Gunicorn作为应用服务器,搭配Nginx反向代理,提升性能和安全性。 - 网络检查:确认Azure App Service的网络规则(如防火墙、VNet集成)未阻止8000端口的入站请求。
内容的提问来源于stack exchange,提问作者Carlos S. C.
相关产品推荐
相关产品推荐

