bitnami/pgpoolPgpool-II 是 PostgreSQL 的代理服务,位于 PostgreSQL 服务器与客户端之间,提供连接池、负载均衡、自动故障转移和复制管理功能。
Bitnami Pgpool-II 镜像是经过安全加固的容器化版本,基于 Bitnami Secure Images initiative,适用于开发和生产环境,提供最小化***面、CVE 透明度(通过 VEX/KEV)、SBOM 清单和企业级支持选项。
自 2025 年 8 月 28 日起,Bitnami 将调整公共镜像目录策略:
docker.io/bitnami 迁移至 docker.io/bitnamilegacy 仓库,且不再接收更新详情参见 Bitnami Secure Images 公告。
bashdocker pull bitnami/pgpool:latest
查看 Docker Hub 标签列表 获取可用版本,格式为:
bashdocker pull bitnami/pgpool:[TAG]
bashgit clone [***] cd containers/bitnami/pgpool/[VERSION]/[DISTRO] docker build -t bitnami/pgpool:latest .
bashdocker run --name pgpool bitnami/pgpool:latest
默认凭据和配置选项见 环境变量 部分。
bashdocker network create my-network --driver bridge
bash# 主节点 pg-0 docker run --detach --name pg-0 \ --network my-network \ --env REPMGR_PARTNER_NODES=pg-0,pg-1 \ --env REPMGR_NODE_NAME=pg-0 \ --env REPMGR_NODE_NETWORK_NAME=pg-0 \ --env REPMGR_PRIMARY_HOST=pg-0 \ --env REPMGR_PASSWORD=repmgrpass \ --env POSTGRESQL_POSTGRES_PASSWORD=adminpassword \ --env POSTGRESQL_USERNAME=customuser \ --env POSTGRESQL_PASSWORD=custompassword \ --env POSTGRESQL_DATABASE=customdatabase \ bitnami/postgresql-repmgr:latest # 备节点 pg-1 docker run --detach --name pg-1 \ --network my-network \ --env REPMGR_PARTNER_NODES=pg-0,pg-1 \ --env REPMGR_NODE_NAME=pg-1 \ --env REPMGR_NODE_NETWORK_NAME=pg-1 \ --env REPMGR_PRIMARY_HOST=pg-0 \ --env REPMGR_PASSWORD=repmgrpass \ --env POSTGRESQL_POSTGRES_PASSWORD=adminpassword \ --env POSTGRESQL_USERNAME=customuser \ --env POSTGRESQL_PASSWORD=custompassword \ --env POSTGRESQL_DATABASE=customdatabase \ bitnami/postgresql-repmgr:latest
bashdocker run --detach --name pgpool \ --network my-network \ -p 5432:5432 \ --env PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432 \ --env PGPOOL_SR_CHECK_USER=customuser \ --env PGPOOL_SR_CHECK_PASSWORD=custompassword \ --env PGPOOL_ENABLE_LDAP=no \ --env PGPOOL_POSTGRES_USERNAME=postgres \ --env PGPOOL_POSTGRES_PASSWORD=adminpassword \ --env PGPOOL_ADMIN_USERNAME=admin \ --env PGPOOL_ADMIN_PASSWORD=adminpassword \ bitnami/pgpool:latest
bashdocker run -it --rm \ --network my-network \ bitnami/postgresql:latest \ psql -h pgpool -U customuser -d customdatabase
创建 docker-compose.yml 文件:
yamlversion: '2' networks: my-network: driver: bridge services: pg-0: image: bitnami/postgresql-repmgr:latest volumes: - pg_0_data:/bitnami/postgresql environment: - POSTGRESQL_POSTGRES_PASSWORD=adminpassword - POSTGRESQL_USERNAME=customuser - POSTGRESQL_PASSWORD=custompassword - POSTGRESQL_DATABASE=customdatabase - REPMGR_PASSWORD=repmgrpassword - REPMGR_PRIMARY_HOST=pg-0 - REPMGR_PARTNER_NODES=pg-0,pg-1 - REPMGR_NODE_NAME=pg-0 - REPMGR_NODE_NETWORK_NAME=pg-0 pg-1: image: bitnami/postgresql-repmgr:latest volumes: - pg_1_data:/bitnami/postgresql environment: - POSTGRESQL_POSTGRES_PASSWORD=adminpassword - POSTGRESQL_USERNAME=customuser - POSTGRESQL_PASSWORD=custompassword - POSTGRESQL_DATABASE=customdatabase - REPMGR_PASSWORD=repmgrpassword - REPMGR_PRIMARY_HOST=pg-0 - REPMGR_PARTNER_NODES=pg-0,pg-1 - REPMGR_NODE_NAME=pg-1 - REPMGR_NODE_NETWORK_NAME=pg-1 pgpool: image: bitnami/pgpool:latest ports: - 5432:5432 environment: - PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432 - PGPOOL_SR_CHECK_USER=customuser - PGPOOL_SR_CHECK_PASSWORD=custompassword - PGPOOL_ENABLE_LDAP=no - PGPOOL_POSTGRES_USERNAME=postgres - PGPOOL_POSTGRES_PASSWORD=adminpassword - PGPOOL_ADMIN_USERNAME=admin - PGPOOL_ADMIN_PASSWORD=adminpassword healthcheck: test: ["CMD", "/opt/bitnami/scripts/pgpool/healthcheck.sh"] interval: 10s timeout: 5s retries: 5 volumes: pg_0_data: driver: local pg_1_data: driver: local
启动集群:
bashdocker-compose up -d
容器启动时会自动执行 /docker-entrypoint-initdb.d 目录下所有 .sh 脚本。通过挂载卷添加自定义脚本:
yaml# docker-compose.yml 示例片段 services: pgpool: image: bitnami/pgpool:latest volumes: - /path/to/init-scripts:/docker-entrypoint-initdb.d # 本地脚本目录挂载
通过环境变量配置 TLS:
PGPOOL_ENABLE_TLS=yes:启用 TLSPGPOOL_TLS_CERT_FILE:证书文件路径PGPOOL_TLS_KEY_FILE:私钥文件路径PGPOOL_TLS_CA_FILE(可选):CA 证书路径(用于客户端认证)示例 docker run 命令:
bashdocker run \ -v /path/to/certs:/opt/bitnami/pgpool/certs \ -e PGPOOL_ENABLE_TLS=yes \ -e PGPOOL_TLS_CERT_FILE=/opt/bitnami/pgpool/certs/postgres.crt \ -e PGPOOL_TLS_KEY_FILE=/opt/bitnami/pgpool/certs/postgres.key \ bitnami/pgpool:latest
通过环境变量指定自定义配置文件覆盖默认配置:
PGPOOL_USER_CONF_FILE:自定义主配置文件路径(追加到默认配置)PGPOOL_USER_HBA_FILE:自定义 host-based 认证配置文件路径(覆盖默认 HBA 配置)示例:
yaml# docker-compose.yml 示例片段 services: pgpool: environment: - PGPOOL_USER_CONF_FILE=/config/myconf.conf - PGPOOL_USER_HBA_FILE=/config/myhbaconf.conf volumes: - /path/to/myconf.conf:/config/myconf.conf - /path/to/myhbaconf.conf:/config/myhbaconf.conf
当后端节点恢复后,需手动重新附加到 Pgpool:
docker exec -it pgpool bashPGPASSWORD=$PGPOOL_ADMIN_PASSWORD pcp_connect -h localhost -U $PGPOOL_ADMIN_USERNAMEshow pool_nodes;(获取节点 ID)pcp_attach_node -h localhost -U $PGPOOL_ADMIN_USERNAME <node_id>| 环境变量名称 | 描述 | 默认值 |
|---|---|---|
PGPOOL_PORT_NUMBER | Pgpool 服务端口 | 5432 |
PGPOOL_BACKEND_NODES | 后端 PostgreSQL 节点列表,格式:id:hostname:port[,id:hostname:port] | - |
PGPOOL_SR_CHECK_USER | 流复制检查用户 | - |
PGPOOL_SR_CHECK_PASSWORD | 流复制检查用户密码 | - |
PGPOOL_ADMIN_USERNAME | PCP 管理接口用户名 | admin |
PGPOOL_ADMIN_PASSWORD | PCP 管理接口密码 | - |
PGPOOL_ENABLE_LOAD_BALANCING | 是否启用负载均衡 | yes |
PGPOOL_MAX_POOL | 最大连接池数量 | 15 |
| 环境变量名称 | 描述 | 默认值 |
|---|---|---|
PGPOOL_ENABLE_TLS | 是否启用 TLS 加密 | no |
PGPOOL_HEALTH_CHECK_PERIOD | 健康检查周期(秒) | 30 |
PGPOOL_HEALTH_CHECK_TIMEOUT | 健康检查超时(秒) | 10 |
PGPOOL_CONNECT_TIMEOUT | 连接超时(毫秒) | *** |
PGPOOL_DISABLE_LOAD_BALANCE_ON_WRITE | 写操作时是否禁用负载均衡 | transaction |
注意:完整环境变量列表请参见 官方文档。
推荐使用 Bitnami Helm Chart 部署到 Kubernetes,详情参见 PostgreSQL HA Chart。
pg_0_data 卷)docker.io/bitnamilegacy 仓库,建议定期更新 latest 标签或迁移至 Secure Imagesmanifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务