Docker环境下Django项目psycopg模块加载及PostgreSQL连接问题
Docker环境Django项目问题解决方案
一、psycopg/psycopg2模块加载失败
- 补全系统依赖:在Dockerfile中添加PostgreSQL编译依赖,避免因缺少底层库导致模块无法编译加载:
RUN apt-get update && apt-get install -y --no-install-recommends libpq-dev gcc - 统一依赖声明:在
requirements.txt中只保留一种psycopg依赖,推荐用预编译的psycopg2-binary(无需本地编译),示例:psycopg2-binary>=2.9.9 Django>=4.2 - 清理镜像缓存重建:执行以下命令彻底重建web服务镜像,避免旧缓存干扰:
docker-compose build --no-cache web docker-compose up -d
二、Django包哈希不匹配导致依赖安装失败
- 移除或更新哈希值:如果
requirements.txt里带有包哈希,直接删除哈希部分(只保留包名+版本),或者进入容器重新生成对应环境的哈希:docker-compose exec web pip freeze --all-hashes > requirements.txt - 统一Python版本:确保Dockerfile中指定的Python版本与生成依赖哈希的环境一致,例如:
FROM python:3.11-slim
三、PostgreSQL连接失败(nodename nor servname provided)
- 修正数据库主机配置:在Django的
settings.py中,数据库HOST必须设置为docker-compose.yml中定义的db服务名(而非localhost),示例:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'PASSWORD': 'postgres', 'HOST': 'db', # 匹配compose里的db服务名 'PORT': '5432', } } - 确认compose依赖配置:在docker-compose.yml中确保web服务依赖db服务,并且网络配置正常:
services: db: image: postgres:15-alpine volumes: - postgres_data:/var/lib/postgresql/data/ environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db environment: - DATABASE_URL=postgresql://postgres:postgres@db:5432/postgres volumes: postgres_data: - 重建容器网络:如果容器间无法通信,执行以下命令重置网络:
docker-compose down -v docker-compose up -d
内容的提问来源于stack exchange,提问作者strikeouts27
相关产品推荐
相关产品推荐

