Docker Compose搭配NGINX部署Django构建成功后localhost无法访问问题排查
问题排查及解决方案
- ALLOWED_HOSTS配置错误
你当前settings.py中的ALLOWED_HOSTS仅配置了['localhost', '127.0.0.1'],仅允许来自本地的请求访问。Nginx转发请求时携带的Host头为你实际访问的公网IP、域名,Django会直接拦截这类请求返回403错误。
解决方法:修改ALLOWED_HOSTS配置,加入你实际访问用的IP、域名,临时排查可改为ALLOWED_HOSTS = ['*'],生产环境请替换为实际的服务域名/IP。 - 生产环境未执行Django初始化命令
你使用的生产环境入口脚本entrypoint.prod.sh中没有执行数据库迁移、静态资源收集命令,会导致服务启动后数据库表不存在、静态资源无法加载。
解决方法:在entrypoint.prod.sh的exec "$@"之前添加如下命令:
python manage.py migrate --no-input python manage.py collectstatic --no-input --clear
- 依赖缺失
检查app/requirements.txt中是否添加了gunicorn依赖,生产环境Web服务使用gunicorn启动,若未安装该依赖会导致Web容器启动失败,直接无法访问。 - 端口冲突
检查宿主机80端口是否被其他服务(如本地Nginx、Apache等)占用,若端口被占Nginx容器无法正常绑定端口,自然无法对外提供服务。 - 容器运行状态异常
执行docker compose -f <你使用的compose配置文件> ps查看Web、Nginx容器的运行状态,若存在重启、退出的情况,执行对应日志命令排查错误:- Web服务日志:
docker compose -f <配置文件> logs web - Nginx服务日志:
docker compose -f <配置文件> logs nginx
- Web服务日志:
- 静态资源权限问题
若只有动态接口能访问、静态资源全部404,检查Nginx是否有权限读取共享卷中的静态文件,临时排查可在nginx/Dockerfile中加入USER root,确认是权限问题后再调整静态文件所属用户组的配置。
内容的提问来源于stack exchange,提问作者Rodragon
相关产品推荐
相关产品推荐

