本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
基于Debian构建的生产就绪型PostgreSQL 17.2 Docker镜像,专注于高可用性部署。集成wal-g和pg_auto_failover工具,提供WAL归档、备份及自动故障转移能力,简化流复制配置,适用于对数据库可靠性有高要求的生产环境。
postgres-contrib扩展包,默认启用pg_stat_statements性能统计扩展pg_upgrade --link命令使用冲突# 使用密码保护,默认情况下镜像已配置安全设置 docker run -d --name postgres -p 5432:5432 -v postgres:/var/lib/postgresql -e POSTGRES_PASSWORD=somepassword livingdocs/postgres:17.2
# 假设已创建旧版本容器(示例为14.5) docker run -d --name postgres -p 5432:5432 -v postgres:/var/lib/postgresql livingdocs/postgres:14.5 # 首先停止旧容器,然后运行升级镜像 docker stop postgres docker run --rm -v postgres:/var/lib/postgresql livingdocs/postgres:17.2-upgrade # 升级成功后,使用新镜像启动并挂载现有卷 docker run -d --name postgres -p 5432:5432 -v postgres:/var/lib/postgresql livingdocs/postgres:17.2
docker build -t livingdocs/postgres:17.2 .
# 构建并推送多架构镜像(amd64/arm64)至Docker Hub docker buildx build --platform linux/amd64,linux/arm64 -t livingdocs/postgres:17.2 --push . # 构建升级版本镜像 docker buildx build --platform linux/amd64,linux/arm64 -t livingdocs/postgres:17.2-upgrade --push -f Dockerfile.upgrade .
# 构建多架构镜像 nerdctl build --platform=amd64,arm64 -t livingdocs/postgres:17.2 . nerdctl build --platform=amd64,arm64 -t livingdocs/postgres:17.2-upgrade -f Dockerfile.upgrade . # 推送所有架构镜像 lima nerdctl push --all-platforms livingdocs/postgres:17.2 lima nerdctl push --all-platforms livingdocs/postgres:17.2-upgrade
# 创建主从容器 docker run -d -p 5433:5432 --name postgres-1 livingdocs/postgres:17.2 docker run -d -p 5434:5432 --name postgres-2 livingdocs/postgres:17.2 standby -d "host=host.docker.internal port=5433 user=postgres target_session_attrs=read-write" # 测试复制功能 docker exec postgres-1 psql -c "CREATE TABLE hello (value text); INSERT INTO hello(value) VALUES('world');" docker exec postgres-2 psql -c "SELECT * FROM hello;" # 输出: # value # ------- # world # (1 row)
# 创建Docker网络模拟生产环境DNS解析 docker network create local # 启动主库容器 docker run -d -p 5433:5432 --name postgres-1 --network=local --network-alias=postgres -e POSTGRES_HOST_AUTH_METHOD=md5 livingdocs/postgres:17.2 # 初始化数据库用户(也可在集群启动时挂载SQL脚本至/var/lib/postgresql/initdb.d自动执行) docker exec postgres-1 psql -c "ALTER ROLE postgres ENCRYPTED PASSWORD 'some-postgres-password';" docker exec postgres-1 psql -c "CREATE USER replication REPLICATION LOGIN ENCRYPTED PASSWORD 'some-replication-password';" # 启动副本容器 export DB_URL="host=postgres port=5432 user=replication password=some-replication-password target_session_attrs=read-write" docker run -d -p 5434:5432 --name postgres-2 --network=local --network-alias=postgres livingdocs/postgres:17.2 standby -d $DB_URL docker run -d -p 5435:5432 --name postgres-3 --network=local --network-alias=postgres livingdocs/postgres:17.2 standby -d $DB_URL # 测试复制功能 docker exec postgres-1 psql -c "CREATE TABLE hello (value text); INSERT INTO hello(value) VALUES('hello');" docker exec postgres-2 psql -c "SELECT * FROM hello;" docker exec postgres-3 psql -c "SELECT * FROM hello;" # 两个副本输出均为: # value # ------- # hello # (1 row) # # 测试手动提升副本为主库 # docker rm -f postgres-1 # 此时向副本插入数据会失败:ERROR: cannot execute INSERT in a read-only transaction docker exec postgres-2 psql -c "INSERT INTO hello(value) VALUES('world');" # 提升副本 docker exec postgres-2 touch /var/lib/postgresql/data/promote.signal # 验证提升结果 docker exec postgres-2 psql -c "INSERT INTO hello(value) VALUES('world');" docker exec postgres-3 psql -c "SELECT * FROM hello;" # 输出均为: # value # ------- # hello # world # (2 rows)
注意:提升前需确保旧主库已停止接受写入,可通过停止容器或执行以下SQL命令实现:
ALTER SYSTEM SET default_transaction_read_only TO 'on'; SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
提升副本有两种方式:
在副本容器的数据目录创建promote.signal文件:
touch /var/lib/postgresql/data/promote.signal
若修改过配置,需确保
promote_trigger_file参数指向该路径
在容器内执行pg_ctl promote命令:
gosu postgres pg_ctl promote
| 环境变量 | 说明 | 默认值 |
|---|---|---|
POSTGRES_PASSWORD | postgres超级用户密码 | 无(必填) |
POSTGRES_HOST_AUTH_METHOD | 主机认证方式(如md5、trust等) | 未指定 |


免费版仅支持 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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429