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

Docker是否自动包含PostgreSQL?Django项目镜像构建配置求助

Django + PostgreSQL Docker部署配置方案

错误原因分析

Is the server running on that host and accepting TCP/IP connections?
2023-07-18 18:22:33 connection to server at "localhost" (::1), port 5432 failed: Cannot assign requested address

核心问题:Docker容器内的localhost指向容器自身,你的Django服务尝试连接容器内的PostgreSQL,但实际数据库并未在该容器中运行,也未与Web容器处于同一网络,导致连接失败。

正确思路是用Docker Compose将Web服务和PostgreSQL服务分离部署,通过容器网络实现互通,而非将数据库打包进Web镜像。


配置修改步骤

1. 完善docker-compose.yml,添加PostgreSQL服务

替换原文件内容,新增数据库服务、网络和数据持久化配置:

services:
  web: 
    build:
      context: app
    ports: 
      - '8000:8000'
    depends_on:
      - db
    environment:
      - DB_NAME=postgres
      - DB_USER=postgres
      - DB_PASSWORD=postgres
      - DB_HOST=db
      - DB_PORT=5432
    networks:
      - app-network

  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    networks:
      - app-network

volumes:
  postgres_data:

networks:
  app-network:
    driver: bridge

配置说明:

  • depends_on:确保Web服务在数据库启动后再启动
  • networks:让两个服务处于同一自定义网络,Web服务可通过db(服务名)直接访问数据库
  • volumes:持久化PostgreSQL数据,避免容器重启后数据丢失
  • 环境变量:传递数据库连接参数给Django,同时初始化PostgreSQL账号

2. 调整Django的settings.py数据库配置

修改数据库连接逻辑,读取容器环境变量:

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASSWORD'),
        'HOST': os.environ.get('DB_HOST'),
        'PORT': os.environ.get('DB_PORT'),
    }
}

注意:需确保requirements.txt中包含psycopg2-binary或psycopg2(PostgreSQL Python驱动)。

3. 优化Dockerfile(可选)

原Dockerfile无需大改,若使用psycopg2而非psycopg2-binary,需添加系统依赖:

FROM python:3

ENV PYTHONUNBUFFERED=1

WORKDIR /code

# 安装PostgreSQL编译依赖(仅当使用psycopg2时需要)
RUN apt-get update && apt-get install -y libpq-dev gcc

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY . .

ENV PORT=8000

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

启动与初始化

  1. 确保requirements.txt包含必要依赖:
django>=4.2
psycopg2-binary>=2.9.7
  1. 构建并启动服务:
docker-compose up --build
  1. 首次启动需执行数据库迁移:
docker-compose exec web python manage.py migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:35:17