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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:43:02