部署到Azure容器实例的Django Web应用无法访问,求解决方案
Django部署到Azure容器实例无法访问的排查与解决
核心问题分析
从操作步骤和配置来看,主要存在以下关键问题:
1. 端口映射不匹配
创建Azure容器实例时指定开放80、443端口,但Docker容器内的Django服务运行在8000端口,两者未做映射,外部请求无法到达容器内的服务。
2. Django的ALLOWED_HOSTS未配置
Django默认仅允许本地地址访问,未添加Azure容器实例的公网IP或DNS域名,会直接拒绝外部请求。
3. 容器运行状态未验证
未确认容器是否正常启动、服务是否在容器内正常运行。
分步解决方法
步骤1:修正端口映射配置
重新创建容器实例时,将容器内部的8000端口映射到Azure的公网端口(如80),使用--ip-port参数指定映射关系:
az container create -g xxtestrg --name test-ci \ --image xxtestcr.azurecr.io/demoproject:v1.0 \ --ip-port 80:8000 \ --cpu 1 --memory 1.5 \ --dns-name-label xxtest-demoproject
说明:
80:8000表示将Azure容器实例的80端口映射到容器内部的8000端口,外部通过80端口访问即可。
步骤2:配置Django的ALLOWED_HOSTS
打开demoproject/settings.py,修改ALLOWED_HOSTS配置,添加Azure容器实例的DNS名称和公网IP:
ALLOWED_HOSTS = [ 'xxtest-demoproject.australiaeast.azurecontainer.io', '4.147.67.11', '0.0.0.0' # 仅测试环境使用,生产环境需指定具体域名 ]
修改后重新构建镜像并推送到ACR:
docker build -t demoproject:v1.1 . docker tag demoproject:v1.1 xxtestcr.azurecr.io/demoproject:v1.1 docker push xxtestcr.azurecr.io/demoproject:v1.1
步骤3:验证容器运行状态
创建容器后,通过以下命令检查状态和日志,确认服务启动情况:
# 查看容器运行状态 az container show -g xxtestrg -n test-ci --query "containers[0].instanceView.currentState" # 查看容器日志,检查Django服务输出 az container logs -g xxtestrg -n test-ci
若日志中出现Starting development server at http://0.0.0.0:8000/,说明容器内服务正常运行。
步骤4:测试访问
完成配置后,通过以下地址访问:
http://xxtest-demoproject.australiaeast.azurecontainer.iohttp://4.147.67.11
内容的提问来源于stack exchange,提问作者J.W
相关产品推荐
相关产品推荐

