如何在Docker Compose中配置PgBouncer连接池?遇密码类型错误
解决PgBouncer连接PostgreSQL的"wrong password type"错误
问题根源
PostgreSQL 10及以上版本默认采用scram-sha-256密码认证方式,但edoburu/pgbouncer镜像默认未配置支持该认证规则,导致密码类型不匹配,触发08P01: server login failed: wrong password type错误。
修复步骤
1. 配置PgBouncer支持SCRAM认证
修改pgbouncer服务的环境变量,添加PASSWORD_AUTH=scram-sha-256,指定使用与PostgreSQL一致的认证方式:
pgbouncer: image: edoburu/pgbouncer environment: - DB_HOST=postgredb - DB_PORT=5432 - DB_USER=dbuser - DB_PASSWORD=dbpassword - ADMIN_USERS=postgres,admin - PASSWORD_AUTH=scram-sha-256 # 新增该行配置 ports: - "5432:5432"
2. 确保数据库用户密码为SCRAM格式
如果你的PostgreSQL是旧版本升级或提前创建的,用户密码可能还是md5格式,需要重置为scram格式:
- 进入PostgreSQL容器:
docker exec -it postgredb psql -U postgres
- 执行SQL重置密码(自动转换为scram-sha-256格式):
ALTER USER dbuser WITH PASSWORD 'dbpassword';
3. 优化应用连接字符串
由于已经通过PgBouncer实现连接池,建议关闭应用自带的连接池,避免双层池化降低性能:
将连接字符串中的Pooling=true改为Pooling=false,以commenting.api为例:
ConnectionString=Server=pgbouncer;Port=5432;Database=commentDb;UId=dbuser;Password=dbpassword;Pooling=false;
4. 补充数据库创建(若未存在)
如果commentDb和postDb尚未在PostgreSQL中创建,需先执行创建命令:
在PostgreSQL容器的psql终端中执行:
CREATE DATABASE commentDb; CREATE DATABASE postDb;
5. 重启容器生效
修改配置后,重启所有相关容器:
docker-compose down && docker-compose up -d
内容的提问来源于stack exchange,提问作者Kaveh Naseri
相关产品推荐
相关产品推荐

