postgres

library/postgres

PostgreSQL作为一款功能强大的对象关系型数据库系统,凭借其先进的架构设计与完善的技术机制,不仅能高效融合关系型数据的结构化管理与对象型数据的灵活扩展,更通过严格的ACID事务支持、多版本并发控制及全面的数据校验机制,为各类应用场景提供卓越的系统可靠性与极致的数据完整性保障,是全球广泛应用的开源数据库优选方案。

1.5万 次收藏下载次数: 0状态:Docker 官方镜像维护者:Docker 官方镜像仓库类型:镜像最近更新:14 天前
让 AI 帮你使用轩辕镜像?

如果你使用 DeepSeek元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。

只需在 AI 对话中先发送下面这句话即可:

请先完整阅读并严格遵守以下文档中的全部规则与要求:

https://xuanyuan.cloud/agents.md

在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。

查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AIDeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。

下载命令
点击查看

PostgreSQL Docker 镜像使用指南

说明

快速参考

维护方

[PostgreSQL Docker 社区]

帮助支持

可通过 [Docker 社区 Slack] 、[Server Fault] 、[Unix & Linux] 或 [Stack Overflow] 获取帮助。

支持的标签及对应 Dockerfile 链接

  • 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 文档] 。

快速参考(续)

  • 问题反馈:[GitHub Issues]
  • 支持架构amd64arm32v5arm32v6arm32v7arm64v8i386mips64leppc64leriscv64s390x([详情] )
  • 镜像信息:[repo-info 仓库] (含元数据、传输大小等)
  • 镜像更新:[official-images 仓库标签] 及 [配置文件]
  • 文档来源:[docs 仓库]

什么是 PostgreSQL?

PostgreSQL(常简称“Postgres”)是一款强调可扩展性和标准兼容性的对象关系型数据库管理系统(ORDBMS)。作为数据库服务器,其核心功能是安全存储数据并支持最佳实践,同时支持本地或网络(含互联网)中的应用程序按需检索数据。它可处理从小型单机应用到高并发互联网应用的各类负载,最新版本还支持数据库复制以提升安全性和可扩展性。

PostgreSQL 实现了 SQL:2011 标准的大部分功能,支持 ACID 事务(含多数 DDL 语句),通过多版本并发控制(MVCC)避免锁竞争,提供防脏读和完全可序列化能力。它支持复杂 SQL 查询、多种索引类型、可更新视图、物化视图、触发器、外键,以及函数和存储过程,并拥有丰富的第三方扩展。此外,PostgreSQL 支持从其他数据库迁移,通过标准 SQL 兼容和迁移工具,甚至可通过内置或第三方扩展模拟专有数据库的特性(如 Oracle)。

更多信息:***

![PostgreSQL 标志]

如何使用本镜像

启动 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: docker.xuanyuan.run/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: docker.xuanyuan.run/adminer
    restart: always
    ports:
      - 8080:8080

执行 docker compose up,待初始化完成后访问 [] 或 [] 如何扩展本镜像

环境变量

PostgreSQL 镜像依赖多个环境变量,其中 POSTGRES_PASSWORD 为必填项,其他为可选。
注意:仅当容器数据目录为空时,以下变量才生效;若目录中已有数据库,启动时将忽略这些变量。

POSTGRES_PASSWORD

必填,用于设置 PostgreSQL 超级用户密码。默认超级用户由 POSTGRES_USER 定义。

  • 注意1:镜像默认对本地连接启用 trust 认证,因此容器内通过 localhost 连接无需密码,但跨容器/主机连接仍需密码。
  • 注意2:此变量仅在初始化时设置超级用户密码,与运行时 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 添加如下行:

bash
echo "host all all all $POSTGRES_HOST_AUTH_METHOD" >> pg_hba.conf
  • 注意1:不建议使用 trust(无需密码即可连接)。
  • 注意2:若设为 trust,则 POSTGRES_PASSWORD 非必填。
  • 注意3:若使用其他值(如 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 声明***卷)。

Docker Secrets

通过环境变量后缀 _FILE 从文件加载敏感信息(如 Docker Secrets)。例如从 /run/secrets/postgres-passwd 读取密码:

bash
docker run --name some-postgres -e POSTGRES_PASSWORD_FILE=/run/secrets/postgres-passwd -d docker.xuanyuan.run/postgres

目前支持 POSTGRES_INITDB_ARGSPOSTGRES_PASSWORDPOSTGRES_USERPOSTGRES_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" 指定用户。

数据库配置

方法1:自定义配置文件

  1. 获取默认配置:
    bash
    docker run -i --rm docker.xuanyuan.run/postgres cat /usr/share/postgresql/postgresql.conf.sample > my-postgres.conf
    
  2. 修改配置(需设置 listen_addresses = '*' 允许跨容器连接)。
  3. 启动容器:
    bash
    docker run -d --name some-postgres -v "$PWD/my-postgres.conf":/etc/postgresql/postgresql.conf -e POSTGRES_PASSWORD=mysecretpassword docker.xuanyuan.run/postgres -c 'config_file=/etc/postgresql/postgresql.conf'
    

方法2:运行时指定参数

通过 docker run 命令直接传递参数(支持所有 .conf 文件中的配置项,格式 -c key=value):

bash
docker run -d --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword docker.xuanyuan.run/postgres -c shared_buffers=256MB -c max_connections=200

本地化配置

Debian 基础镜像

通过 Dockerfile 扩展以设置 locale(如 de_DE.utf8):

dockerfile
FROM docker.xuanyuan.run/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

Alpine 基础镜像

PostgreSQL 15+ 的 Alpine 版本支持 ICU 本地化(旧版本不支持)。通过 POSTGRES_INITDB_ARGS 设置:

bash
docker run -d -e LANG=de_DE.utf8 -e POSTGRES_INITDB_ARGS="--locale-provider=icu --icu-locale=de-DE" -e POSTGRES_PASSWORD=mysecretpassword docker.xuanyuan.run/postgres:15-alpine

扩展插件

  • Debian 镜像:直接安装包(如 PostGIS),参考 [postgis/docker-postgis] 。
  • Alpine 镜像:非 postgres-contrib 插件需手动编译,参考 [postgis/docker-postgis] 。

任意 --user 说明

镜像支持通过 docker run --user 以非默认用户启动([#253] 、[#1018]([]

postgres 国内 Docker 镜像拉取说明

在国内网络环境下,直接使用 docker pull 访问 Docker Hub 官方仓库时,较常遇到连接超时、TLS 握手失败或 registry 响应缓慢等情况。这类问题多与跨境链路质量、运营商策略及客户端 DNS 解析有关,并非单个镜像本身异常。

轩辕镜像提供两种常用加速方式:一是使用公共加速域名 docker.xuanyuan.run 拉取(可参考 登录认证方式);二是在控制台配置 专属域名拉取,将拉取命令中的 registry 前缀替换为分配的专属域名,通常能提升成功率与稳定性。

postgres 为例,加速拉取命令格式为 docker pull docker.xuanyuan.run/postgres:<标签>,请将 <标签> 替换为具体版本。下方「镜像拉取方式」区块提供与本文一致的命令示例,可直接复制使用。

PostgreSQL 容器化部署时建议持久化 PGDATA 目录,并通过环境变量设置 POSTGRES_PASSWORD 等初始化参数。

镜像拉取方式

您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面

轩辕镜像加速拉取命令点我查看更多 postgres 镜像标签

docker pull docker.xuanyuan.run/postgres:<标签>

DockerHub 原生拉取命令

docker pull postgres:<标签>

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

专业版 · 高速稳定拉取镜像
50GB 仅 ¥7/年
高速镜像下载在线技术支持99.95% SLA 保障付费会员免广告