【Docker】PostgreSQL 容器化部署

PostgreSQL标准软件基于Bitnami PostgreSQL 构建。当前版本为16.1.0

你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取

配置文件地址: https://gitee.com/qingplus/qingcloud-platform

qinghub自动安装部署配置库

连接到其他容器

使用Docker 容器网络,应用程序容器可以轻松访问容器内运行的 PostgreSQL 服务器。

连接到同一网络的容器可以使用容器名称作为主机名来相互通信。

使用命令行

在此示例中,我们将创建一个 PostgreSQL 客户端实例,该实例将连接到与客户端在同一 docker 网络上运行的服务器实例。

第 1 步:创建网络
console 复制代码
docker network create app-tier --driver bridge
步骤 2:启动 PostgreSQL 服务器实例

使用命令--network app-tier的参数docker run将 PostgreSQL 容器连接到网络app-tier。

console 复制代码
docker run -d --name postgresql-server \
    --network app-tier \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
第 3 步:启动 PostgreSQL 客户端实例

最后,我们创建一个新的容器实例来启动 PostgreSQL 客户端并连接到上一步中创建的服务器:

console 复制代码
docker run -it --rm \
    --network app-tier \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest psql -h postgresql-server -U postgres

使用 Docker Compose 文件

如果未指定,Docker Compose 会自动设置一个新网络并将所有已部署的服务附加到该网络。但是,我们将显式定义一个bridge名为 的新网络app-tier。在此示例中,我们假设您希望从您自己的自定义应用程序映像连接到 PostgreSQL 服务器,该映像在以下代码片段中通过服务名称进行标识myapp。

yaml 复制代码
version: '2'

networks:
  app-tier:
    driver: bridge

services:
  postgresql:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    networks:
      - app-tier
  myapp:
    image: 'YOUR_APPLICATION_IMAGE'
    networks:
      - app-tier

重要

替换YOUR_APPLICATION_IMAGE占位符

在您的应用程序容器中,使用主机名postgresql连接到 PostgreSQL 服务器

启动容器:

console 复制代码
docker-compose up -d

配置

容器启动时

当容器执行时,初始化或启动postgresql之前,它会执行位于/docker-entrypoint-preinitdb.d的扩展名为.sh的文件。

为了将自定义文件放入 docker 映像中,您可以将它们安装为卷。

将额外的命令行标志传递给 PostgreSQL

可以通过以下环境变量将额外的命令行标志传递给 postgresql 服务命令:

  • POSTGRESQL_EXTRA_FLAGS:要附加到postgres启动命令的标志。无默认值

初始化一个新实例

当容器第一次执行时,它将执行扩展名为.sh, .sql.sql.gz的文件,位于/docker-entrypoint-initdb.d目录下.

为了将自定义文件放入 docker 映像中,您可以将它们安装为卷。

首次运行时设置 root 密码

在上面的命令中您可能已经注意到环境变量的使用POSTGRESQL_PASSWORD。首次运行映像时传递环境变量POSTGRESQL_PASSWORD会将postgres用户的密码设置为POSTGRESQL_PASSWORD的值(或POSTGRESQL_PASSWORD_FILE变量中指定的文件的内容)。

console 复制代码
docker run --name postgresql -e POSTGRESQL_PASSWORD=password123 registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通过修改docker-compose.yml文件:

yaml 复制代码
services:
  postgresql:
  ...
    environment:
      - POSTGRESQL_PASSWORD=password123
  ...

注意! 该postgres用户是超级用户,拥有 PostgreSQL 数据库的完全管理访问权限。

首次运行时创建数据库

POSTGRESQL_DATABASE通过在第一次运行镜像时传递环境变量,将创建一个数据库。如果您的应用程序要求数据库已存在,这非常有用,使您不必使用 PostgreSQL 客户端手动创建数据库。

console 复制代码
docker run --name postgresql -e POSTGRESQL_DATABASE=my_database registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通过修改docker-compose.yml文件:

yaml 复制代码
services:
  postgresql:
  ...
    environment:
      - POSTGRESQL_DATABASE=my_database
  ...

首次运行时创建数据库用户

您还可以创建一个受限数据库用户,该用户仅具有使用环境变量创建的数据库的权限POSTGRESQL_DATABASE。为此,请提供POSTGRESQL_USERNAME环境变量。

console 复制代码
docker run --name postgresql -e POSTGRESQL_USERNAME=my_user -e POSTGRESQL_PASSWORD=password123 -e POSTGRESQL_DATABASE=my_database registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通过修改docker-compose.yml文件:

yaml 复制代码
services:
  postgresql:
  ...
    environment:
      - POSTGRESQL_USERNAME=my_user
      - POSTGRESQL_PASSWORD=password123
      - POSTGRESQL_DATABASE=my_database
  ...

注意!POSTGRESQL_USERNAME指定后,postgres user不会分配密码,因此您无法以该postgres用户身份远程登录 PostgreSQL 服务器。如果您仍想使用用户postgres进行访问,请设置POSTGRESQL_POSTGRES_PASSWORD环境变量(或POSTGRESQL_POSTGRES_PASSWORD_FILE指定文件中内容)。

审计

PostgreSQL image默认启用 pgAudit 模块。因此,可以使用以下环境变量在容器中启用审核信息:

  • POSTGRESQL_PGAUDIT_LOG:以逗号分隔的列表,其中包含要审核的不同操作。没有默认值。
  • POSTGRESQL_PGAUDIT_LOG_CATALOG:在语句中的所有关系都在 pg_catalog 中的情况下启用会话日志记录。没有默认值。
  • POSTGRESQL_LOG_CONNECTIONS:添加登录日志条目。没有默认值。
  • POSTGRESQL_LOG_DISCONNECTIONS:添加注销日志条目。没有默认值。
  • POSTGRESQL_LOG_HOSTNAME:记录客户端主机名。没有默认值。
  • POSTGRESQL_LOG_LINE_PREFIX:定义日志条目行的格式。在PostgreSQL 官方文档中查找字符串参数。没有默认值。
  • POSTGRESQL_LOG_TIMEZONE:设置日志条目时间戳的时区。没有默认值。

会话设置

PostgreSQL 映像允许配置多个连接和会话管理参数:

  • POSTGRESQL_USERNAME_CONNECTION_LIMIT:如果创建了不同的用户postgres,请设置连接限制。没有默认值。
  • POSTGRESQL_POSTGRES_CONNECTION_LIMIT:设置用户的连接限制postgres。没有默认值。
  • POSTGRESQL_STATEMENT_TIMEOUT:设置语句超时时间。没有默认值。
  • POSTGRESQL_TCP_KEEPALIVES_INTERVAL:TCP 保活间隔。没有默认值。
  • POSTGRESQL_TCP_KEEPALIVES_IDLE:TCP keepalive 空闲时间。没有默认值。
  • POSTGRESQL_TCP_KEEPALIVES_COUNT:TCP 保活计数。没有默认值。

配置时区

PostgreSQL 映像允许使用以下环境变量配置 PostgreSQL 的时区:

  • POSTGRESQL_TIMEZONE:设置显示和解释时间戳的时区。
  • POSTGRESQL_LOG_TIMEZONE:设置写入服务器日志的时间戳所使用的时区。

修改pg_hba.conf

默认情况下,PostgreSQL image会生成local、md5 在pg_hba.conf文件。为了适应任何其他要求或标准,可以通过以下方式更改 pg_hba.conf 文件:

  • 挂载你自己的pg_hba.conf 到文件/bitnami/postgresql/conf
  • POSTGRESQL_PGHBA_REMOVE_FILTERS将与以逗号分隔的模式列表一起使用。所有与任何模式匹配的行都将被删除。例如,如果我们想要删除所有local和md5验证(例如,仅支持hostssl连接),请设置POSTGRESQL_PGHBA_REMOVE_FILTERS=local, md5.

预加载共享库

可以通过设置 .postgresql 文件来修改 PostgreSQL 在启动时预加载的库列表POSTGRESQL_SHARED_PRELOAD_LIBRARIES。默认值为POSTGRESQL_SHARED_PRELOAD_LIBRARIES=pgaudit。例如,如果您想将pg_stat_statements库添加到预加载中,请设置POSTGRESQL_SHARED_PRELOAD_LIBRARIES=pgaudit, pg_stat_statements。

设置流式复制

可以使用以下环境变量设置流复制集群:

  • POSTGRESQL_REPLICATION_MODE:复制模式。可能的值master/ slave。没有默认值。
  • POSTGRESQL_REPLICATION_USER:首次运行时在主服务器上创建的复制用户。没有默认值。
  • POSTGRESQL_REPLICATION_PASSWORD:复制用户密码。没有默认值。
  • POSTGRESQL_REPLICATION_PASSWORD_FILE:包含复制用户密码的文件的路径。这将覆盖 中指定的值POSTGRESQL_REPLICATION_PASSWORD。没有默认值。
  • POSTGRESQL_MASTER_HOST:复制主机的主机名/IP(从机参数)。没有默认值。
  • POSTGRESQL_MASTER_PORT_NUMBER:复制主机的服务器端口(从机参数)。默认为5432.
    在复制集群中,您可以拥有一个主服务器和零个或多个从服务器。启用复制后,主节点处于读写模式,而从节点处于只读模式。为了获得最佳性能,建议限制对从属设备的读取。
第 1 步:创建复制主服务器

第一步是启动master。

console 复制代码
docker run --name postgresql-master \
  -e POSTGRESQL_REPLICATION_MODE=master \
  -e POSTGRESQL_USERNAME=my_user \
  -e POSTGRESQL_PASSWORD=password123 \
  -e POSTGRESQL_DATABASE=my_database \
  -e POSTGRESQL_REPLICATION_USER=my_repl_user \
  -e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

在此命令中,我们使用参数将容器配置为主容器POSTGRESQL_REPLICATION_MODE=master。POSTGRESQL_REPLICATION_USER使用和参数指定复制用户POSTGRESQL_REPLICATION_PASSWORD。

第2步:创建复制从站

接下来我们启动一个复制从属容器。

console 复制代码
docker run --name postgresql-slave \
  --link postgresql-master:master \
  -e POSTGRESQL_REPLICATION_MODE=slave \
  -e POSTGRESQL_MASTER_HOST=master \
  -e POSTGRESQL_MASTER_PORT_NUMBER=5432 \
  -e POSTGRESQL_REPLICATION_USER=my_repl_user \
  -e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

在上面的命令中,容器被配置为slave使用POSTGRESQL_REPLICATION_MODE参数。在复制从属启动之前,从属容器使用POSTGRESQL_MASTER_HOST和POSTGRESQL_MASTER_PORT_NUMBER参数连接到主服务器并从主服务器复制初始数据库。POSTGRESQL_REPLICATION_PASSWORD和POSTGRESQL_REPLICATION_USER用于向主服务器进行身份验证。为了更改pg_hba.conf默认设置,从站需要知道是否POSTGRESQL_PASSWORD已设置。

通过这两个命令,您现在已经启动并运行了一个两节点 PostgreSQL 主从流复制集群。您可以通过添加/删除从属服务器来扩展集群,而不会导致任何停机。

注意:集群会完整复制主节点,其中包括所有用户和数据库。

如果主服务器出现故障,您可以重新配置从服务器以充当主服务器,并通过创建触发器文件开始接受写入/tmp/postgresql.trigger.5432。例如,以下命令重新配置postgresql-slave为充当主服务器:

console 复制代码
docker exec postgresql-slave touch /tmp/postgresql.trigger.5432

注意:集群中其他从站的配置需要更新,以便它们知道新的主站。--link postgresql-slave:master这将要求您按照我们的示例重新启动其他从站。

通过 Docker Compose,可以使用以下命令设置主从复制:

yaml 复制代码
version: '2'

services:
  postgresql-master:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    volumes:
      - 'postgresql_master_data:/bitnami/postgresql'
    environment:
      - POSTGRESQL_REPLICATION_MODE=master
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_USERNAME=my_user
      - POSTGRESQL_PASSWORD=my_password
      - POSTGRESQL_DATABASE=my_database
  postgresql-slave:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    depends_on:
      - postgresql-master
    environment:
      - POSTGRESQL_REPLICATION_MODE=slave
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_MASTER_HOST=postgresql-master
      - POSTGRESQL_PASSWORD=my_password
      - POSTGRESQL_MASTER_PORT_NUMBER=5432

volumes:
  postgresql_master_data:

使用以下方法扩展从站数量:

console 复制代码
docker-compose up --detach --scale postgresql-master=1 --scale postgresql-slave=3

上面的命令将 Slave 的数量增加到3。您可以用同样的方法缩小规模。

注意:您不应增加/减少主节点的数量。始终只有一个主节点运行。

同步提交

默认情况下,从属实例配置为异步复制。为了保证更多的数据稳定性(以一些性能为代价),可以使用以下环境设置同步提交(即事务提交在被写入一组副本之前不会向客户端返回成功)变量。

  • POSTGRESQL_SYNCHRONOUS_COMMIT_MODE:建立同步提交的类型。可用选项有:on, remote_apply, remote_write, local and off。默认值为on。
  • POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS:建立将启用同步复制的副本数量。该数量不得超过您在集群中配置的从站数量。
    使用 Docker Compose,可以按如下方式设置具有同步提交的主从复制:
yaml 复制代码
version: '2'

services:
  postgresql-master:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    volumes:
      - 'postgresql_master_data:/bitnami/postgresql'
    environment:
      - POSTGRESQL_REPLICATION_MODE=master
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_USERNAME=my_user
      - POSTGRESQL_PASSWORD=my_password
      - POSTGRESQL_DATABASE=my_database
      - POSTGRESQL_SYNCHRONOUS_COMMIT_MODE=on
      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
    volumes:
      - '/path/to/postgresql-persistence:/bitnami/postgresql'
  postgresql-slave:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    depends_on:
      - postgresql-master
    environment:
      - POSTGRESQL_REPLICATION_MODE=slave
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_MASTER_HOST=postgresql-master
      - POSTGRESQL_MASTER_PORT_NUMBER=5432
  postgresql-slave2:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    depends_on:
      - postgresql-master
    environment:
      - POSTGRESQL_REPLICATION_MODE=slave
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_MASTER_HOST=postgresql-master
      - POSTGRESQL_MASTER_PORT_NUMBER=5432

在上面的示例中,提交需要写入主服务器和从服务器之一才能被接受。另一个从站将继续使用异步复制。使用以下 SQL 查询检查它:

console 复制代码
postgres=# select application_name as server, state,
postgres-#       sync_priority as priority, sync_state
postgres-#       from pg_stat_replication;
| server      | state     | priority | sync_state |
|-------------|-----------|----------|------------|
| walreceiver | streaming | 0        | sync       |
| walreceiver | streaming | 0        | async      |

注意:对于更高级的设置,您可以application_name通过设置POSTGRESQL_CLUSTER_APP_NAME环境变量来使用参数定义不同的复制组。

LDAP认证

为了使用 LDAP 身份验证,您需要将环境变量设置POSTGRESQL_ENABLE_LDAP为yes来启用它。

有两种设置 LDAP 配置的方法:

  • 通过配置POSTGRESQL_LDAP_URL,您可以在其中配置URL中的所有关联参数。

  • 独立设置参数POSTGRESQL_LDAP_xxxx。

    LDAP相关参数有:

  • POSTGRESQL_LDAP_SERVER:要连接的 LDAP 服务器的 IP 地址或名称。用空格分隔。

  • POSTGRESQL_LDAP_PORT:LDAP 服务器上要连接的端口号

  • POSTGRESQL_LDAP_SCHEME:设置为ldaps使用 LDAPS。默认为无。

  • POSTGRESQL_LDAP_TLS:设置为1使用 TLS 加密。默认为无。

  • POSTGRESQL_LDAP_PREFIX:形成要绑定的 DN 时要添加到用户名前面的字符串。默认为无。

  • POSTGRESQL_LDAP_SUFFIX:形成要绑定的 DN 时附加到用户名的字符串。默认为无。

  • POSTGRESQL_LDAP_BASE_DN:开始搜索用户的根 DN。默认为无。

  • POSTGRESQL_LDAP_BIND_DN:要绑定到 LDAP 的用户的 DN。默认为无。

  • POSTGRESQL_LDAP_BIND_PASSWORD:绑定LDAP的用户密码。默认为无。

  • POSTGRESQL_LDAP_SEARCH_ATTR:与搜索中的用户名匹配的属性。默认为无。

  • POSTGRESQL_LDAP_SEARCH_FILTER:进行搜索+绑定身份验证时使用的搜索过滤器。默认为无。

  • POSTGRESQL_LDAP_URL:要连接的 URL,格式为:ldap[s]😕/host[:port]/basedn[?[attribute][?[scope][?[filter]]]]。

保护 PostgreSQL 流量

PostgreSQL 支持使用 SSL/TLS 协议对连接进行加密。如果您希望启用此可选功能,您可以使用以下环境变量来配置应用程序:

  • POSTGRESQL_ENABLE_TLS:是否对流量启用 TLS。默认为no.
  • POSTGRESQL_TLS_CERT_FILE:包含 TLS 流量证书文件的文件。没有默认值。
  • POSTGRESQL_TLS_KEY_FILE:包含证书密钥的文件。没有默认值。
  • POSTGRESQL_TLS_CA_FILE:包含证书 CA 的文件。如果提供,PostgreSQL 将通过请求证书来验证 TLS/SSL 客户端(请参阅ref)。没有默认值。
  • POSTGRESQL_TLS_CRL_FILE:包含证书吊销列表的文件。没有默认值。
  • POSTGRESQL_TLS_PREFER_SERVER_CIPHERS:是否使用服务器的 TLS 密码首选项而不是客户端的。默认为yes.
    启用 TLS 时,PostgreSQL 默认情况下将支持标准流量和加密流量,但更喜欢后者。下面是一些有关如何快速设置 TLS 流量的示例:

使用docker run

复制代码
```console
$ docker run \
    -v /path/to/certs:/opt/bitnami/postgresql/certs \
    -e ALLOW_EMPTY_PASSWORD=yes \
    -e POSTGRESQL_ENABLE_TLS=yes \
    -e POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt \
    -e POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
```

修改docker-compose.yml文件:

复制代码
```yaml
services:
  postgresql:
  ...
    environment:
      ...
      - POSTGRESQL_ENABLE_TLS=yes
      - POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt
      - POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key
    ...
    volumes:
      ...
      - /path/to/certs:/opt/bitnami/postgresql/certs
  ...
```

或者,您也可以在自定义配置文件中提供此配置。

配置文件

该图像在 中查找postgresql.conf文件/opt/bitnami/postgresql/conf/。您可以在以下位置安装卷/bitnami/postgresql/conf/并复制/编辑. 如果该目录为空,则默认配置将被填充到该目录中。postgresql.conf/path/to/postgresql-persistence/conf/conf/

console 复制代码
/path/to/postgresql-persistence/conf/
└── postgresql.conf

0 directories, 1 file

由于 PostgreSQL 映像是非 root 的,因此您需要为主机中的挂载目录设置适当的权限:

console 复制代码
sudo chown 1001:1001 /path/to/postgresql-persistence/conf/
第 1 步:运行 PostgreSQL 映像

运行 PostgreSQL 映像,从主机安装目录。

console 复制代码
docker run --name postgresql \
    -v /path/to/postgresql-persistence/conf/:/bitnami/postgresql/conf/ \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或使用 Docker Compose:

yaml 复制代码
version: '2'

services:
  postgresql:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432:5432'
    volumes:
      - /path/to/postgresql-persistence/conf/:/bitnami/postgresql/conf/
第 2 步:编辑配置

使用您喜欢的编辑器编辑主机上的配置。

console 复制代码
vi /path/to/postgresql-persistence/conf/postgresql.conf
第三步:重启PostgreSQL

更改配置后,重新启动 PostgreSQL 容器以使更改生效。

console 复制代码
docker restart postgresql

或使用 Docker Compose:

console 复制代码
docker-compose restart postgresql

有关配置选项的完整列表,请参阅服务器配置手册。

允许从默认文件以外的文件加载设置postgresql.conf

除了使用自定义之外postgresql.conf,您还可以包含.conf以conf.d目录结尾的文件/bitnami/postgresql/conf/。为此,默认postgresql.conf包含以下部分:

config 复制代码
##------------------------------------------------------------------------------
## CONFIG FILE INCLUDES
##------------------------------------------------------------------------------

## These options allow settings to be loaded from files other than the
## default postgresql.conf.

include_dir = 'conf.d'  # Include files ending in '.conf' from directory 'conf.d'

在您的主机中,您应该在目录下创建扩展配置文件conf.d:

console 复制代码
mkdir -p /path/to/postgresql-persistence/conf/conf.d/
vi /path/to/postgresql-persistence/conf/conf.d/extended.conf

如果您使用自定义的postgresql.conf,您应该在配置文件中创建(或取消注释)上述部分,在这种情况下,/path/to/postgresql-persistence/conf/结构应该类似于

console 复制代码
/path/to/postgresql-persistence/conf/
├── conf.d
│   └── extended.conf
└── postgresql.conf

1 directory, 2 files

指定 initdb 参数

使用以下环境变量可以轻松指定额外的 initdb 参数:

  • POSTGRESQL_INITDB_ARGS:指定 initdb 命令的额外参数。没有默认值。
  • POSTGRESQL_INITDB_WAL_DIR:定义事务日志的自定义位置。没有默认值。
console 复制代码
docker run --name postgresql \
  -e POSTGRESQL_INITDB_ARGS="--data-checksums" \
  -e POSTGRESQL_INITDB_WAL_DIR="/bitnami/waldir" \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通过修改docker-compose.yml文件:

yaml 复制代码
services:
  postgresql:
  ...
    environment:
      - POSTGRESQL_INITDB_ARGS=--data-checksums
      - POSTGRESQL_INITDB_WAL_DIR=/bitnami/waldir
  ...

停止设置

您可以使用以下命令控制初始化过程中用于停止 postgresql 的参数:

  • POSTGRESQL_PGCTLTIMEOUT这将设置命令的超时pg_ctl。
  • POSTGRESQL_SHUTDOWN_MODE这将指示所使用的关闭模式。

安装额外的语言环境

Dockerfile 提供了两个参数来在构建时配置额外的区域设置:

  • WITH_ALL_LOCALES:启用所有支持的区域设置。默认值:否
  • EXTRA_LOCALES:要启用的额外区域设置的逗号分隔列表。无默认值
    例如,要构建支持区域设置的映像es_ES.UTF-8 UTF-8,您可以将以下参数添加到构建命令中:
console 复制代码
docker build --build-arg EXTRA_LOCALES="es_ES.UTF-8 UTF-8" ...

环境变量别名

容器允许两组不同的环境变量。请参阅下表中的环境变量别名列表:

环境变量 别名
POSTGRESQL_USERNAME POSTGRES_USER
POSTGRESQL_DATABASE POSTGRES_DB
POSTGRESQL_PASSWORD POSTGRES_PASSWORD
POSTGRESQL_PASSWORD_FILE POSTGRES_PASSWORD_FILE
POSTGRESQL_POSTGRES_PASSWORD POSTGRES_POSTGRES_PASSWORD
POSTGRESQL_POSTGRES_PASSWORD_FILE POSTGRES_POSTGRES_PASSWORD_FILE
POSTGRESQL_PORT_NUMBER POSTGRES_PORT_NUMBER
POSTGRESQL_INITDB_ARGS POSTGRES_INITDB_ARGS
POSTGRESQL_INITDB_WAL_DIR POSTGRES_INITDB_WAL_DIR
POSTGRESQL_DATA_DIR PGDATA
POSTGRESQL_REPLICATION_USER POSTGRES_REPLICATION_USER
POSTGRESQL_REPLICATION_MODE POSTGRES_REPLICATION_MODE
POSTGRESQL_REPLICATION_PASSWORD POSTGRES_REPLICATION_PASSWORD
POSTGRESQL_REPLICATION_PASSWORD_FILE POSTGRES_REPLICATION_PASSWORD_FILE
POSTGRESQL_CLUSTER_APP_NAME POSTGRES_CLUSTER_APP_NAME
POSTGRESQL_MASTER_HOST POSTGRES_MASTER_HOST
POSTGRESQL_MASTER_PORT_NUMBER POSTGRES_MASTER_PORT_NUMBER
POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS POSTGRES_NUM_SYNCHRONOUS_REPLICAS
POSTGRESQL_SYNCHRONOUS_COMMIT_MODE POSTGRES_SYNCHRONOUS_COMMIT_MODE
POSTGRESQL_SHUTDOWN_MODE POSTGRES_SHUTDOWN_MODE

重要信息:更改POSTGRES_USER不会更改数据库的所有者,数据库的所有者将继续作为用户postgres。要更改数据库所有者,请使用postgres用户 ( $ psql -U postgres ...) 访问并执行以下命令:

console 复制代码
alter database POSTGRES_DATABASE owner to POSTGRES_USER;

可以更改 PostgreSQL 用于执行 init 脚本的用户。为此,请使用以下环境变量:

环境变量 描述
POSTGRESQL_INITSCRIPTS_USERNAME 将用于执行初始化脚本的用户
POSTGRESQL_INITSCRIPTS_PASSWORD POSTGRESQL_INITSCRIPT_USERNAME 中指定的用户的密码

默认 toast 压缩

默认的 toast 压缩是pglz,但您可以通过将环境变量设置POSTGRES_DEFAULT_COMPRESSION为所需的值来修改它。例如:POSTGRES_DEFAULT_COMPRESSION='lz4'。

日志

console 复制代码
docker logs postgresql

或使用 Docker Compose:

console 复制代码
docker-compose logs postgresql

你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取

开源地址: https://gitee.com/qingplus/qingcloud-platform

QingHub PostgreSQL部署手册

相关推荐
呼拉拉呼拉7 分钟前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超10 分钟前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)31 分钟前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅39 分钟前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
一加一等于二1 小时前
docker部署postgresql17,并且安装插件
docker·postgresql
超级小忍2 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税2 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
hshpy3 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
文牧之4 小时前
Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
运维·数据库·oracle
篱笆院的狗4 小时前
如何使用 Redis 快速实现布隆过滤器?
数据库·redis·缓存