本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

本镜像描述因超出 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 标志
$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
入口脚本会通过 initdb 创建默认用户(postgres)和数据库。
说明:
postgres数据库是默认数据库,供用户、工具和第三方应用使用(PostgreSQL 文档)。
psql 连接$ 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 示例:
# 使用 postgres/example 作为用户/密码凭证 services: db: image: postgres restart: always shm_size: 128mb # 设置共享内存限制(docker compose 方式) # 若通过 swarm stack 部署,可改用 tmpfs 挂载: # volumes: # - type: tmpfs # target: /dev/shm # tmpfs: # size: 134217728 # 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。例如启用数据页校验和:
-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 添加如下行:
echo "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 读取密码:
docker 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 脚本:
#!/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" 指定用户。
docker run -i --rm postgres cat /usr/share/postgresql/postgresql.conf.sample > my-postgres.conf
listen_addresses = '*' 允许跨容器连接)。docker 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):
docker run -d --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword postgres -c shared_buffers=256MB -c max_connections=200
通过 Dockerfile 扩展以设置 locale(如 de_DE.utf8):
FROM 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 设置:
docker 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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429