这是一个基于Alpine Linux的轻量级PgBouncer镜像,用于提供PostgreSQL连接池功能。PgBouncer作为应用与PostgreSQL数据库之间的中间层,可有效减少数据库连接的内存占用和启动成本,尤其适合需要优化数据库连接性能的Web应用场景。
psql、pg_isready等PostgreSQL客户端工具/etc/pgbouncer/pgbouncer.ini和/etc/pgbouncer/userlist.txt不存在,将自动创建PostgreSQL连接会占用较多内存(约10MB/连接),且TLS连接建立存在显著的启动成本。Web应用通过使用持久连接可提升性能,但直接与数据库建立大量持久连接会消耗过多资源。
通过在Web应用与PostgreSQL数据库之间部署PgBouncer,可有效降低内存和启动成本:Web应用保持与PgBouncer的持久连接,而PgBouncer仅维持少量与实际PostgreSQL服务器的连接,并可复用这些连接供多个客户端使用。
基础镜像标签:
latest - 默认最新版本1.X.Y-pZ - 特定分支版本使用DATABASE_URL环境变量:
shdocker run --rm \ -e DATABASE_URL="postgres://user:pass@postgres-host/database" \ -p 5432:5432 \ edoburu/pgbouncer
或使用单独的环境变量:
shdocker run --rm \ -e DB_USER=user \ -e DB_PASSWORD=pass \ -e DB_HOST=postgres-host \ -e DB_NAME=database \ -p 5432:5432 \ edoburu/pgbouncer
连接测试:
shpsql 'postgresql://user:pass@localhost/dbname'
几乎所有pgbouncer.ini中的设置都可通过环境变量定义(除端口、syslog、pid等Docker环境中意义不大的设置)。详情见入口脚本。示例:
shdocker run --rm \ -e DATABASE_URL="postgres://user:pass@postgres-host/database" \ -e POOL_MODE=session \ -e SERVER_RESET_QUERY="DISCARD ALL" \ -e MAX_CLIENT_CONN=100 \ -p 5432:5432 \ edoburu/pgbouncer
示例配置见examples/docker-compose文件夹。
示例配置见examples/kubernetes文件夹。
确保PostgreSQL接受来自PgBouncer所在机器的连接:
postgresql.conf中的listen_addressespg_hba.conf中允许指定IP范围的连接(如10.0.0.0/8):conf# TYPE DATABASE USER ADDRESS METHOD host all all 10.0.0.0/8 md5
当默认pgbouncer.ini不满足需求,或需多用户通过单个PgBouncer实例连接时,可挂载自定义配置:
shdocker run --rm \ -e DB_USER=user \ -e DB_PASSWORD=pass \ -e DB_HOST=postgres-host \ -e DB_NAME=database \ -v pgbouncer.ini:/etc/pgbouncer/pgbouncer.ini:ro \ -p 5432:5432 \ edoburu/pgbouncer
或扩展Dockerfile:
DockerfileFROM edoburu/pgbouncer:1.11.0 COPY pgbouncer.ini userlist.txt /etc/pgbouncer/
当pgbouncer.ini存在时,启动脚本不会覆盖它。若DATABASE_URL包含凭据或定义了DB_USER和DB_PASSWORD,会向userlist.txt添加额外条目。
userlist.txt格式:
txt"username" "plaintext-password"
或
txt"username" "md5<md5 of password + username>"
使用examples/generate-userlist生成该文件:
shexamples/generate-userlist >> userlist.txt
也可通过设置AUTH_USER,让单个用户连接PgBouncer并获取实际数据库密码,详见:<[***]>
当定义了管理员用户且userlist.txt中存在其密码时,可连接到特殊的pgbouncer数据库:
shpsql postgres://postgres@容器主机名/pgbouncer # 容器外 psql postgres://127.0.0.1/pgbouncer # 容器内
支持执行多种管理控制台命令,例如:
sqlSHOW STATS; SHOW SERVERS; SHOW CLIENTS; SHOW POOLS;
还可临时断开后端数据库(如重启时),同时保持Web应用与PgBouncer的连接:
sqlPAUSE; RESUME;

来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429