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

Docker Compose部署Django-React应用web容器未运行报502错误

排查步骤

  1. 优先查看web容器运行日志定位崩溃原因
    运行以下命令获取website容器的启动/运行日志,直接定位容器启动失败或抛出错误的具体原因:
docker logs -f website
  1. 修正ALLOWED_HOSTS配置
    Django的ALLOWED_HOSTS需要匹配所有请求访问时的Host头值,你需要在配置中同时加入以下内容:
  • 你的DigitalOcean Droplet公网IP
  • docker-compose内部的web服务名web(nginx容器通过该服务名访问web容器)
  • 本地调试用的localhost、127.0.0.1

参考settings.py配置示例:

import os
# 按空格拆分环境变量传入的允许域名
ALLOWED_HOSTS = os.getenv("DJANGO_ALLOWED_HOSTS", "localhost 127.0.0.1 web").split()

对应.env文件配置示例(替换为你的实际公网IP):

DJANGO_ALLOWED_HOSTS=192.168.1.1 localhost 127.0.0.1 web
  1. 检查Nginx反向代理配置
    你的Nginx配置中转发到Django服务的规则必须使用docker内部服务名,不能用127.0.0.1,否则Nginx会访问自身容器的8000端口导致连通失败:
location / {
    # 注意这里的地址是web:8000,对应docker-compose中web服务的名称和端口
    proxy_pass http://web:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
  1. 排查500错误问题
    当ALLOWED_HOSTS仅配置localhost、127.0.0.1时返回500,常见原因如下:
  • Nginx转发请求时携带的Host头是公网IP,不在ALLOWED_HOSTS列表中,Django直接抛出异常
  • 生产环境关闭DEBUG后未正确配置静态资源路径、跨域规则或数据库连接
  • 镜像构建时缺失Python依赖包,运行时触发导入错误
    可临时开启DEBUG模式(调试完成后必须关闭)查看具体报错信息,或查看Django运行日志定位问题。
  1. 验证容器间网络连通性
    如果以上配置均正确仍返回502,可进入Nginx容器测试到web容器的连通性:
docker exec -it nginx ping web

如果无法ping通,说明docker内部网络异常,可重启docker服务后重新执行docker-compose up -d重建容器。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:27:04