

生产就绪的PostgreSQL容器,提供多种针对不同工作负载优化的版本:AI/RAG、分析或通用用途。基于Alpine Linux构建,包含预编译扩展。
bash# 基础PostgreSQL(最小镜像) docker pull ghcr.io/oorabona/postgres:17-alpine # 带pgvector的AI/RAG应用版本 docker pull ghcr.io/oorabona/postgres:17-vector-alpine # 带分析扩展的版本 docker pull ghcr.io/oorabona/postgres:17-analytics-alpine # 带TimescaleDB的时序数据版本 docker pull ghcr.io/oorabona/postgres:17-timeseries-alpine # 带PostGIS的地理空间数据版本 docker pull ghcr.io/oorabona/postgres:17-spatial-alpine # 带Citus的分布式PostgreSQL版本 docker pull ghcr.io/oorabona/postgres:17-distributed-alpine # 包含所有扩展的完整版本 docker pull ghcr.io/oorabona/postgres:17-full-alpine
| 版本 | 描述 | 扩展 | 使用场景 |
|---|---|---|---|
| base | 标准PostgreSQL | 仅内置扩展 | 通用目的,最小体积 |
| vector | AI/ML优化 | + pgvector, paradedb, pg_cron, pg_ivm | RAG、嵌入向量、全文搜索 |
| analytics | 数据仓库 | + pg_partman, hypopg, pg_qualstats, postgis, pg_cron, pg_ivm | 大型表、查询调优、地理空间 |
| timeseries | 时序数据 | + TimescaleDB, pg_partman, postgis, pg_cron, pg_ivm | IoT、指标、日志 |
| spatial | 地理空间 | + postgis, pg_cron, pg_ivm | GIS、地图、位置数据 |
| distributed | 水平扩展 | + Citus, pg_cron, pg_ivm | 多节点集群、分片 |
| full | 包含所有功能 | 所有扩展 | 开发、测试 |
基础版 (*-alpine)
标准PostgreSQL,包含内置扩展:
pg_stat_statements - 查询统计pgcrypto - 加密函数uuid-ossp - UUID生成btree_gin、btree_gist - 额外索引类型pg_trgm - 用于模糊搜索的三元组匹配向量版 (*-vector-alpine)
包含基础版 + pgvector,适用于AI/ML工作负载:
sql-- 存储来自OpenAI、Anthropic等的嵌入向量 CREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT, embedding vector(1536) -- OpenAI ada-002维度 ); -- 创建HNSW索引以实现快速相似度搜索 CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops); -- 查找相似文档 SELECT * FROM documents ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector LIMIT 10;
分析版 (*-analytics-alpine)
包含基础版 + 数据仓库扩展:
sql-- 为时序表自动分区 SELECT partman.create_parent( p_parent_table := 'public.events', p_control := 'created_at', p_interval := 'daily' ); -- 检查假设索引的收益 SELECT hypopg_create_index('CREATE INDEX ON users(email)'); EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
时序版 (*-timeseries-alpine)
包含基础版 + 时序工作负载扩展:
sql-- 创建时序数据超表 CREATE TABLE metrics ( time TIMESTAMPTZ NOT NULL, device_id TEXT, temperature DOUBLE PRECISION ); SELECT create_hypertable('metrics', by_range('time')); -- 使用time_bucket进行聚合 SELECT time_bucket('1 hour', time) AS bucket, device_id, AVG(temperature) AS avg_temp FROM metrics WHERE time > NOW() - INTERVAL '1 day' GROUP BY bucket, device_id ORDER BY bucket DESC;
地理空间版 (*-spatial-alpine)
包含基础版 + PostGIS地理空间扩展:
sqlCREATE EXTENSION postgis; CREATE TABLE places ( id SERIAL PRIMARY KEY, name TEXT, location GEOGRAPHY(POINT, 4326) ); -- 查找10公里范围内的地点 SELECT name, ST_Distance(location, ST_MakePoint(-73.99, 40.73)::geography) AS dist FROM places WHERE ST_DWithin(location, ST_MakePoint(-73.99, 40.73)::geography, 10000) ORDER BY dist;
分布式版 (*-distributed-alpine)
包含基础版 + Citus水平扩展:
sql-- 创建分布式表 SELECT citus_set_coordinator_host('coordinator', 5432); SELECT create_distributed_table('events', 'tenant_id'); -- 或创建引用表(跨节点复制) SELECT create_reference_table('config'); -- 查询自动分布式执行 SELECT tenant_id, COUNT(*) FROM events GROUP BY tenant_id;
完整版 (*-full-alpine)
包含所有扩展,适用于开发和测试。集成了其他所有版本(向量、分析、时序、地理空间、分布式)的功能。
| 版本 | 可用版本类型 | 状态 |
|---|---|---|
| PostgreSQL 18 | base, vector, analytics, timeseries, spatial, distributed, full | 最新 |
| PostgreSQL 17 | base, vector, analytics, timeseries, spatial, distributed, full | 推荐 |
| PostgreSQL 16 | base, vector, analytics, timeseries, spatial, distributed, full | LTS |
ghcr.io/oorabona/postgres:{version}-{flavor}-alpine
示例:
17-alpine 或 17-base-alpine - PG17基础版17-vector-alpine - PG17向量版16-analytics-alpine - PG16分析版17-full-alpine - PG17完整版yamlservices: postgres: image: ghcr.io/oorabona/postgres:17-vector-alpine environment: POSTGRES_DB: myapp POSTGRES_USER: myuser POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U myuser -d myapp"] interval: 30s timeout: 10s retries: 3 volumes: postgres_data:
bashdocker run -d \ --name postgres \ -e POSTGRES_DB=myapp \ -e POSTGRES_USER=myuser \ -e POSTGRES_PASSWORD=secret \ -p 5432:5432 \ -v postgres_data:/var/lib/postgresql/data \ ghcr.io/oorabona/postgres:17-vector-alpine
bash# 构建基础版 docker build --build-arg VERSION=17-alpine --build-arg FLAVOR=base -t postgres:17 . # 构建向量版 docker build --build-arg VERSION=17-alpine --build-arg FLAVOR=vector -t postgres:17-vector . # 构建包含所有扩展的版本 docker build --build-arg VERSION=17-alpine --build-arg FLAVOR=full -t postgres:17-full .
| 变量 | 描述 | 默认值 |
|---|---|---|
POSTGRES_DB | 数据库名称 | postgres |
POSTGRES_USER | 数据库用户 | postgres |
POSTGRES_PASSWORD | 用户密码 | (必填) |
POSTGRES_INITDB_ARGS | 额外的initdb参数 | |
PGDATA | 数据目录 | /var/lib/postgresql/data |
将.sql或.sh文件放在挂载到/docker-entrypoint-initdb.d/的卷中:
yamlvolumes: - ./init:/docker-entrypoint-initdb.d
脚本在容器首次启动时按字母顺序执行:
init/ ├── 01-schema.sql ├── 02-seed-data.sql └── 03-setup.sh
对于生产工作负载,考虑在postgresql.conf中设置以下参数:
ini# 内存 shared_buffers = 256MB effective_cache_size = 1GB work_mem = 16MB maintenance_work_mem = 128MB # 预写日志 wal_buffers = 16MB checkpoint_completion_target = 0.9 max_wal_size = 2GB # 查询规划器 random_page_cost = 1.1 effective_io_concurrency = 200 default_statistics_target = 100
| 扩展 | 版本 | 描述 | 版本类型 | 许可证 |
|---|---|---|---|---|
| pgvector | 0.8.1 | 向量相似度搜索 | vector, full | PostgreSQL |
| ParadeDB (pg_search) | 0.21.8 | BM25全文搜索 | vector, full | AGPL-3.0 |
| pg_partman | 5.4.2 | 分区管理 | analytics, timeseries, full | PostgreSQL |
| hypopg | 1.4.2 | 假设索引 | analytics, full | PostgreSQL |
| pg_qualstats | 2.1.3 | 谓词统计 | analytics, full | PostgreSQL |
| PostGIS | 3.6.2 | 地理空间类型和函数 | analytics, timeseries, spatial, full | GPL-2.0 |
| TimescaleDB | 2.25.1 | 时序数据库 | timeseries, full | Apache-2.0 + TSL |
| Citus | 14.0.0 | 分布式PostgreSQL | distributed, full | AGPL-3.0 |
| pg_cron | 1.6.7 | 任务调度器 | vector, analytics, timeseries, spatial, distributed, full | PostgreSQL |
| pg_ivm | 1.13 | 增量物化视图 | vector, analytics, timeseries, spatial, distributed, full | PostgreSQL |
所有版本均包含以下PostgreSQL contrib扩展:
pg_stat_statements - 查询性能统计pgcrypto - 加密函数uuid-ossp - UUID生成btree_gin / btree_gist - 额外索引类型pg_trgm - 模糊字符串匹配分析版和完整版还包含:
pg_buffercache - 共享缓冲区检查pg_prewarm - 缓冲区缓存预加载file_fdw / postgres_fdw - 外部数据包装器(仅完整版)切勿硬编码密码:
yaml# 不推荐 environment: POSTGRES_PASSWORD: mysecretpassword # 推荐 - 使用环境变量 environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # 更推荐 - 使用Docker secrets secrets: postgres_password: file: ./secrets/postgres_password.txt
yamlservices: postgres: image: ghcr.io/oorabona/postgres:17-alpine read_only: true tmpfs: - /tmp - /run/postgresql cap_drop: - ALL cap_add: - CHOWN - SETGID - SETUID - DAC_OVERRIDE security_opt: - no-new-privileges:true ports: - "127.0.0.1:5432:5432" # 仅本地访问
127.0.0.1以仅允许本地访问bash# 检查PostgreSQL是否就绪 docker exec postgres pg_isready -U myuser -d myapp # 连接测试 docker exec postgres psql -U myuser -d myapp -c "SELECT 1"
sql-- 启用pg_stat_statements(所有版本已默认启用) -- 前10条最慢查询 SELECT query, calls, mean_exec_time, total_exec_time FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;
sql-- 按表的缓冲缓存使用情况 SELECT c.relname, count(*) AS buffers, pg_size_pretty(count(*) * 8192) AS size FROM pg_buffercache b JOIN pg_class c ON b.relfilenode = c.relfilenode GROUP BY c.relname ORDER BY buffers DESC LIMIT 10;
bash# SQL转储 docker exec postgres pg_dump -U myuser myapp > backup.sql # 二进制备份(大型数据库更快) docker exec postgres pg_basebackup -U myuser -D /backup -Ft -z
bash# 从SQL转储恢复 docker exec -i postgres psql -U myuser -d myapp < backup.sql # 从备份创建新数据库 docker exec postgres createdb -U myuser myapp_restored docker exec -i postgres psql -U myuser -d myapp_restored < backup.sql
bash# 检查当前版本 ./version.sh # 检查最新上游版本 ./version.sh latest # 输出格式(JSON用于CI集成) ./version.sh --json
postgres/ ├── Dockerfile # 多版本构建 ├── variants.yaml # 版本/类型矩阵 ├── extensions/ │ ├── config.yaml # 扩展定义 │ ├── build/ # 扩展构建脚本 │ └── artifacts/ # 已编译扩展tar包 ├── flavors/ │ ├── base.yaml # 基础版配置 │ ├── vector.yaml # 向量版配置 │ ├── analytics.yaml # 分析版配置 │ ├── timeseries.yaml # 时序版配置 │ ├── spatial.yaml # 地理空间版配置 │ ├── distributed.yaml # 分布式版配置 │ └── full.yaml # 完整版配置 └── custom-init/ # 自定义初始化脚本
您可以通过组合扩展创建自己的版本,以满足特定需求。
在flavors/中创建新文件:
yaml# flavors/myapp.yaml name: myapp description: "我的应用的自定义版本" extends: base # 选择要包含的已编译扩展 extensions: - pgvector # 用于AI功能
以下是 oorabona/postgres 相关的常用 Docker 镜像,适用于 关系型数据库、复杂查询、数据完整性 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务