Docker环境中Django+psycopg2连接PostgreSQL 15出现协议版本错误的排查与解决请求
Docker环境中Django+psycopg2连接PostgreSQL 15出现协议版本错误的排查与解决请求
我在Docker容器中运行Django应用和PostgreSQL 15时遇到了协议版本错误:
FATAL: unsupported frontend protocol 0.0: server supports 3.0 to 3.0 FATAL: unsupported frontend protocol 255.255: server supports 3.0 to 3.0 FATAL: no PostgreSQL user name specified in startup packet
我的环境配置:
- Django 4.2.16
- PostgreSQL 15
- psycopg2-binary 2.9.10
- Python 3.11.4
Docker Compose配置:
services: postgres: image: postgres:14 container_name: postgres volumes: - postgres_data:/var/lib/postgresql/data/ environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} ports: - "5432:5432" backend: build: context: ./core dockerfile: Dockerfile.prod container_name: backend volumes: - ./core:/home/app/core - static_volume:/home/app/core/static - media_volume:/home/app/core/media expose: - "8000" environment: # role for entrypoint - ROLE=backend # basic settings - SECRET_KEY=${SECRET_KEY} - DEBUG=${DEBUG} # database configuration - PGDB_ENGINE=${PGDB_ENGINE} - PGDB_NAME=${PGDB_NAME} - PGDB_USER=${PGDB_USER} - PGDB_PASSWORD=${PGDB_PASSWORD} - PGDB_HOST=${PGDB_HOST} - PGDB_PORT=${PGDB_PORT} depends_on: - postgres restart: always nginx: image: nginx:stable-alpine container_name: nginx ports: - "80:80" - "443:443" volumes: - ./default.conf:/etc/nginx/conf.d/default.conf - static_volume:/home/app/core/static - media_volume:/home/app/core/media depends_on: - backend restart: always volumes: static_volume: media_volume: postgres_data:
当我运行docker-compose文件时,这些错误出现在日志末尾。有意思的是,把PostgreSQL镜像版本降级到14就能完全解决问题。
另外一个奇怪的点是,VS Code会把postgres:15镜像标记为“过时”,但对postgres:14却没有这个警告,这看起来有点反常识,毕竟15版本更新一些。
我想知道是什么导致了psycopg2和PostgreSQL 15之间的协议不兼容?有没有办法在保留PostgreSQL 15的前提下解决这个问题?
我已经尝试过的步骤:
- 清理所有Docker卷
- 重新构建容器
备注:内容来源于stack exchange,提问作者Tareq Khaleghi
相关产品推荐
相关产品推荐

