在testdriven.io教程中执行命令遇SCRAM认证版本错误求助
解决psycopg2-binary与libpq版本不兼容导致的SCRAM认证错误
针对你遇到的SCRAM authentication requires libpq version 10 or above错误,以下是几种可行的解决方案:
方案1:更换Docker基础镜像为Debian Bullseye
你当前使用的slim-buster(Debian Buster)默认libpq版本低于10,无法支持SCRAM认证。而Debian Bullseye版本的libpq为13,完全满足要求。
修改Dockerfile的基础镜像行:
FROM python:3.10.3-slim-bullseye
同时简化系统依赖安装步骤(无需安装完整postgresql包):
# 安装编译依赖 RUN apt-get -qq update \ && apt-get -qq install -y libpq-dev gcc netcat 1>/dev/null \ && apt-get clean \ && rm -rf /var/lib/apt/lists/*
重新构建镜像并运行即可。
方案2:在Buster镜像中手动安装高版本libpq
如果不想更换基础镜像,可以从PostgreSQL官方源安装更高版本的libpq:
替换Dockerfile中原有的依赖安装部分为以下内容:
# 添加PostgreSQL官方源 RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ && curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \ && apt-get -qq update \ && apt-get -qq install -y libpq12 libpq-dev gcc netcat 1>/dev/null \ && apt-get clean \ && rm -rf /var/lib/apt/lists/*
方案3:临时降级PostgreSQL认证方式(不推荐用于生产)
如果上述方案无法快速生效,可临时修改PostgreSQL服务端配置,将SCRAM改为MD5认证:
- 进入PostgreSQL容器:
docker-compose exec db bash - 修改
postgresql.conf:将password_encryption = scram-sha-256改为password_encryption = md5 - 修改
pg_hba.conf:将对应数据库行的scram-sha-256改为md5 - 重启PostgreSQL服务:
pg_ctl restart
注意:此方案仅作为临时应急,SCRAM比MD5安全性更高,生产环境建议优先使用前两种方案。
内容的提问来源于stack exchange,提问作者Paul G
相关产品推荐
相关产品推荐

