
本镜像描述因超出 Docker Hub 25000 字符限制已被截断,完整内容可查看 GitHub 文档。相关背景可参考 docker/hub-feedback#238 和 docker/roadmap#475。
PostgreSQL Docker 社区
可通过 Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow 获取帮助。
18.x 版本
18.0, 18, latest, 18.0-trixie, 18-trixie, trixie
18.0-bookworm, 18-bookworm, bookworm
18.0-alpine3.22, 18-alpine3.22, alpine3.22, 18.0-alpine, 18-alpine, alpine
18.0-alpine3.21, 18-alpine3.21, alpine3.21
17.x 版本
17.6, 17, 17.6-trixie, 17-trixie
17.6-bookworm, 17-bookworm
17.6-alpine3.22, 17-alpine3.22, 17.6-alpine, 17-alpine
17.6-alpine3.21, 17-alpine3.21
16.x 版本
16.10, 16, 16.10-trixie, 16-trixie
16.10-bookworm, 16-bookworm
16.10-alpine3.22, 16-alpine3.22, 16.10-alpine, 16-alpine
16.10-alpine3.21, 16-alpine3.21
15.x 及以下版本
完整标签列表见 GitHub 文档。
amd64、arm32v5、arm32v6、arm32v7、arm64v8、i386、mips64le、ppc64le、riscv64、s390x(详情)PostgreSQL(常简称“Postgres”)是一款强调可扩展性和标准兼容性的对象关系型数据库管理系统(ORDBMS)。作为数据库服务器,其核心功能是安全存储数据并支持最佳实践,同时支持本地或网络(含互联网)中的应用程序按需检索数据。它可处理从小型单机应用到高并发互联网应用的各类负载,最新版本还支持数据库复制以提升安全性和可扩展性。
PostgreSQL 实现了 SQL:2011 标准的大部分功能,支持 ACID 事务(含多数 DDL 语句),通过多版本并发控制(MVCC)避免锁竞争,提供防脏读和完全可序列化能力。它支持复杂 SQL 查询、多种索引类型、可更新视图、物化视图、触发器、外键,以及函数和存储过程,并拥有丰富的第三方扩展。此外,PostgreSQL 支持从其他数据库迁移,通过标准 SQL 兼容和迁移工具,甚至可通过内置或第三方扩展模拟专有数据库的特性(如 Oracle)。
更多信息:***
!PostgreSQL 标志
bash$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
入口脚本会通过 initdb 创建默认用户(postgres)和数据库。
说明:
postgres数据库是默认数据库,供用户、工具和第三方应用使用(PostgreSQL 文档)。
psql 连接bash$ docker run -it --rm --network some-network postgres psql -h some-postgres -U postgres psql (14.3) Type "help" for help. postgres=# SELECT 1; ?column? ---------- 1 (1 row)
docker compose 部署compose.yaml 示例:
yaml# 使用 postgres/example 作为用户/密码凭证 services: db: image: postgres restart: always shm_size: 128mb # 设置共享内存限制(docker compose 方式) # 若通过 swarm stack 部署,可改用 tmpfs 挂载: # volumes: # - type: tmpfs # target: /dev/shm # tmpfs: # size: *** # 128MB environment: POSTGRES_PASSWORD: example adminer: image: adminer restart: always ports: - 8080:8080
执行 docker compose up,待初始化完成后访问 [***] 或 [***] 如何扩展本镜像
PostgreSQL 镜像依赖多个环境变量,其中 POSTGRES_PASSWORD 为必填项,其他为可选。
注意:仅当容器数据目录为空时,以下变量才生效;若目录中已有数据库,启动时将忽略这些变量。
POSTGRES_PASSWORD必填,用于设置 PostgreSQL 超级用户密码。默认超级用户由 POSTGRES_USER 定义。
trust 认证,因此容器内通过 localhost 连接无需密码,但跨容器/主机连接仍需密码。psql 客户端使用的 PGPASSWORD 环境变量无关(详情)。POSTGRES_USER可选,与 POSTGRES_PASSWORD 配合创建超级用户及同名数据库。若未指定,默认用户为 postgres。
初始化时可能显示“数据库文件属主为 user 'postgres'”,此处指 Linux 系统用户(镜像内
/etc/passwd定义),与POSTGRES_USER无关。
POSTGRES_DB可选,指定初始化时创建的默认数据库名称。若未指定,默认使用 POSTGRES_USER 的值。
POSTGRES_INITDB_ARGS可选,传递参数给 initdb。例如启用数据页校验和:
bash-e POSTGRES_INITDB_ARGS="--data-checksums"
POSTGRES_INITDB_WALDIR可选,指定事务日志(WAL)存储路径(默认位于 PGDATA 子目录)。PostgreSQL 9.x 中变量名为 POSTGRES_INITDB_XLOGDIR(因 10+ 版本将 --xlogdir 重命名为 --waldir)。
POSTGRES_HOST_AUTH_METHOD可选,控制 host 类型连接的认证方式(适用于所有数据库、用户和地址)。默认值:14+ 版本为 scram-sha-256,旧版本为 md5。初始化时会向 pg_hba.conf 添加如下行:
bashecho "host all all all $POSTGRES_HOST_AUTH_METHOD" >> pg_hba.conf
trust(无需密码即可连接)。trust,则 POSTGRES_PASSWORD 非必填。scram-sha-256),可能需配合 POSTGRES_INITDB_ARGS=--auth-host=scram-sha-256。PGDATA重要变更:PostgreSQL 18+ 版本中,
PGDATA默认路径改为/var/lib/postgresql/18/docker(后续版本将18替换为对应主版本号),且镜像定义的VOLUME为/var/lib/postgresql。建议将数据卷挂载到/var/lib/postgresql。
旧版本用户可手动指定PGDATA以适配新路径(如--env PGDATA=/var/lib/postgresql/17/docker),并迁移数据至PG_MAJOR/docker子目录。
注意:17 及以下版本需挂载/var/lib/postgresql/data(而非/var/lib/postgresql),否则数据不会持久化(因镜像默认在/var/lib/postgresql/data声明***卷)。
通过环境变量后缀 _FILE 从文件加载敏感信息(如 Docker Secrets)。例如从 /run/secrets/postgres-passwd 读取密码:
bashdocker run --name some-postgres -e POSTGRES_PASSWORD_FILE=/run/secrets/postgres-passwd -d postgres
目前支持 POSTGRES_INITDB_ARGS、POSTGRES_PASSWORD、POSTGRES_USER、POSTGRES_DB。
在 /docker-entrypoint-initdb.d 目录下添加 *.sql、*.sql.gz 或 *.sh 脚本,可在数据库初始化后自动执行(仅当数据目录为空时)。
示例:创建用户和数据库的 init-user-db.sh 脚本:
bash#!/usr/bin/env bash set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL CREATE USER docker; CREATE DATABASE docker; GRANT ALL PRIVILEGES ON DATABASE docker TO docker; EOSQL
脚本按文件名排序执行(默认 locale 为 en_US.utf8),*.sql 文件由 POSTGRES_USER 执行,*.sh 脚本建议通过 --username "$POSTGRES_USER" 指定用户。
bashdocker run -i --rm postgres cat /usr/share/postgresql/postgresql.conf.sample > my-postgres.conf
listen_addresses = '*' 允许跨容器连接)。bashdocker run -d --name some-postgres -v "$PWD/my-postgres.conf":/etc/postgresql/postgresql.conf -e POSTGRES_PASSWORD=mysecretpassword postgres -c 'config_file=/etc/postgresql/postgresql.conf'
通过 docker run 命令直接传递参数(支持所有 .conf 文件中的配置项,格式 -c key=value):
bashdocker run -d --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword postgres -c shared_buffers=256MB -c max_connections=200
通过 Dockerfile 扩展以设置 locale(如 de_DE.utf8):
dockerfileFROM postgres:14.3 RUN localedef -i de_DE -c -f UTF-8 -A /usr/share/locale/locale.alias de_DE.UTF-8 ENV LANG de_DE.utf8
PostgreSQL 15+ 的 Alpine 版本支持 ICU 本地化(旧版本不支持)。通过 POSTGRES_INITDB_ARGS 设置:
bashdocker run -d -e LANG=de_DE.utf8 -e POSTGRES_INITDB_ARGS="--locale-provider=icu --icu-locale=de-DE" -e POSTGRES_PASSWORD=mysecretpassword postgres:15-alpine
postgres-contrib 插件需手动编译,参考 postgis/docker-postgis。--user 说明镜像支持通过 docker run --user 以非默认用户启动(#253、[#1018]([***]

来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 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