Docker部署Django+Nginx+PostgreSQL失败求助:Django与Nginx无法运行
Django+Nginx+PostgreSQL Docker部署问题排查与修复
一、核心问题梳理
你的配置里有几个关键错误,直接导致Django和Nginx无法正常工作:
- 环境变量拼写/格式错误:
ALLOWD_HOST应为ALLOWED_HOSTS;数据库相关变量用了减号(DATABASE-NAME),Django无法识别,必须改成下划线格式 - 未执行静态文件收集:Django的静态资源没同步到共享卷,Nginx找不到资源
- 数据库就绪等待缺失:
depends_on只保证容器启动顺序,不确保PostgreSQL服务完全就绪,Django启动时会因连接失败崩溃 - Nginx配置缺失:挂载了配置目录但没有实际配置文件,无法反向代理到Django服务
二、修复后的配置文件
1. 修正版docker-compose.yml
version: '3.8' services: database: container_name: database image: postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres volumes: - postgres:/var/lib/postgresql/data restart: always app: build: context: . container_name: django-app command: > sh -c " # 等待PostgreSQL服务就绪 until pg_isready -h database -p 5432 -U postgres; do echo '等待PostgreSQL启动...' sleep 2 done && # 执行数据库迁移 python3 manage.py migrate && # 收集静态文件到共享卷 python3 manage.py collectstatic --noinput && # 启动Gunicorn服务 gunicorn config.wsgi:application --bind 0.0.0.0:8000 " volumes: - static:/usr/src/app/static - media:/usr/src/app/media depends_on: - database environment: - DEBUG=False - ALLOWED_HOSTS=* - DATABASE_NAME=postgres - DATABASE_USER=postgres - DATABASE_PASSWORD=postgres - DATABASE_HOST=database - DATABASE_PORT=5432 nginx: image: nginx container_name: nginx ports: - "80:80" volumes: - ./nginx:/etc/nginx/conf.d - static:/var/www/static - media:/var/www/media depends_on: - app restart: always volumes: postgres: static: media:
2. 新增Nginx配置文件(项目根目录创建nginx文件夹,里面放default.conf)
server { listen 80; server_name _; # 静态资源访问路径 location /static/ { root /var/www; expires 30d; } location /media/ { root /var/www; expires 30d; } # 反向代理到Django服务 location / { proxy_pass http://django-app: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; } }
3. 检查requirements.txt
确保里面包含必要依赖:
django gunicorn psycopg2-binary # 你的其他项目依赖...
三、重新部署步骤
- 在项目根目录创建
nginx文件夹,放入上面的default.conf - 执行命令清理旧容器并重新构建:
docker-compose down -v docker-compose build --no-cache docker-compose up -d
- 查看容器状态:
docker-compose ps
- 如果仍有问题,查看日志排查:
docker-compose logs app docker-compose logs nginx
内容的提问来源于stack exchange,提问作者Nasir ahmad Ahmady
相关产品推荐
相关产品推荐

