本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
此容器镜像包含适用于OpenShift和一般用途的PostgreSQL 9.5 SQL数据库服务器。用户可选择基于RHEL或CentOS的基础镜像。RHEL镜像可在Red Hat容器目录获取,镜像名为registry.access.redhat.com/rhscl/postgresql-95-rhel7;CentOS镜像可在Docker Hub获取,镜像名为centos/postgresql-95-centos7。
本容器镜像提供PostgreSQL postgres守护进程和客户端应用的容器化打包。postgres服务器守护进程接受客户端连接,并代表客户端提供对PostgreSQL数据库内容的访问。有关PostgreSQL项目的更多信息,请访问项目官网([***]
以下示例使用rhscl/postgresql-95-rhel7镜像。若只需设置必填环境变量且不将数据库存储在主机目录中,执行以下命令:
$ docker run -d --name postgresql_database -e POSTGRESQL_USER=user -e POSTGRESQL_PASSWORD=pass -e POSTGRESQL_DATABASE=db -p 5432:5432 rhscl/postgresql-95-rhel7
此命令将创建一个名为postgresql_database的容器,运行PostgreSQL数据库db,用户凭据为user:pass。端口5432将暴露并映射到主机。若需数据库在容器重启后持久化,需添加-v /host/db/path:/var/lib/pgsql/data参数(见下文),该路径为PostgreSQL数据库集群目录。
若数据库集群目录未初始化,入口脚本将首先运行initdb并设置必要的数据库用户和密码。数据库初始化完成后(或已存在时),将执行postgres并以PID 1运行。可通过docker stop postgresql_database停止后台运行的容器。
可在初始化时通过-e VAR=VALUE参数设置以下环境变量:
POSTGRESQL_USER
数据库用户名称(必填)
POSTGRESQL_PASSWORD
用户密码(必填)
POSTGRESQL_DATABASE
数据库名称(必填)
POSTGRESQL_ADMIN_PASSWORD
postgres管理员账户密码(可选)
POSTGRESQL_MIGRATION_REMOTE_HOST
迁移源主机名/IP
POSTGRESQL_MIGRATION_ADMIN_PASSWORD
远程postgres管理员密码
POSTGRESQL_MIGRATION_IGNORE_ERRORS(可选,默认no)
设为yes可忽略SQL导入错误
POSTGRESQL_MAX_CONNECTIONS(默认:100)
允许的最大客户端连接数
POSTGRESQL_MAX_PREPARED_TRANSACTIONS(默认:0)
可处于"预备"状态的最大事务数。若使用预备事务,建议至少设为与max_connections相同
POSTGRESQL_SHARED_BUFFERS(默认:32M)
PostgreSQL用于缓存数据的内存大小
POSTGRESQL_EFFECTIVE_CACHE_SIZE(默认:128M)
操作系统和数据库内可用于磁盘缓存的内存估计值
可通过-v /host/dir:/container/dir:Z参数挂载以下目录:
/var/lib/pgsql/data
PostgreSQL数据库集群目录
注意:从主机挂载目录到容器时,需确保挂载目录具有适当权限,且目录的所有者和组与容器内运行的用户UID或名称匹配。
通常(除非使用docker run -u选项),容器内进程以UID 26运行。在GNU/Linux系统上,可通过以下命令修复数据目录权限:$ setfacl -m u:26:-wx /your/data/dir $ docker run <...> -v /your/data/dir:/var/lib/pgsql/data:Z <...>
PostgreSQL容器支持从远程PostgreSQL服务器迁移数据。迁移命令示例:
$ docker run -d --name postgresql_database \ -e POSTGRESQL_MIGRATION_REMOTE_HOST=172.17.0.2 \ -e POSTGRESQL_MIGRATION_ADMIN_PASSWORD=remoteAdminP@ssword \ [可选配置变量] openshift/postgresql-92-centos7
迁移通过转储和恢复方式实现(对远程集群运行pg_dumpall并通过psql本地导入)。由于过程流式传输(Unix管道),不会创建中间转储文件以节省存储空间。
默认情况下,若迁移过程中SQL命令失败,迁移脚本将终止以确保全有或全无的迁移结果。通常,从基于相同原理创建的旧版PostgreSQL容器(如从openshift/postgresql-92-centos7迁移到centos/postgresql-95-centos7)可成功迁移,但不保证。从其他类型的PostgreSQL容器迁移可能失败。
若"全有或全无"原则不适用且了解风险,可设置POSTGRESQL_MIGRATION_IGNORE_ERRORS进行尽力而为的迁移(可能丢失数据,需用户检查错误输出并手动修复)。
注意:容器镜像仅提供便利工具,不保证完全自动迁移。迁移前请确保已备份数据并准备手动干预。迁移时无需设置
POSTGRESQL_USER等变量,所有数据(包括数据库、角色、密码)均从旧集群复制。需确保使用与旧容器相同的可选配置变量,若远程集群有非默认配置,可能需手动复制配置文件。
安全警告:新旧集群间的IP通信默认不加密,需用户配置SSL或通过其他方式确保安全。
当容器以--memory参数运行,且未设置POSTGRESQL_SHARED_BUFFERS和POSTGRESQL_EFFECTIVE_CACHE_SIZE时,这两个值将基于--memory参数自动计算:
shared_buffers:内存的1/4effective_cache_size:内存的1/2默认情况下,postgres管理员账户无密码,仅允许本地连接。可在初始化容器时通过POSTGRESQL_ADMIN_PASSWORD环境变量设置密码,允许远程登录。本地连接仍无需密码。
数据库用户(POSTGRESQL_USER)和postgres管理员账户的密码仅支持通过环境变量POSTGRESQL_PASSWORD和POSTGRESQL_ADMIN_PASSWORD修改。通过SQL语句或其他方式修改密码将导致环境变量值与实际密码不匹配,容器启动时会将密码重置为环境变量值。
警告:升级数据目录前,务必确保已备份所有数据并准备手动回滚!
本镜像支持自动升级由sclorg镜像提供的PostgreSQL 9.4版本(仅此版本)的数据目录。升级需切换到新版本镜像,并设置POSTGRESQL_UPGRADE变量显式请求数据转换。
升级内部通过pg_upgrade实现,容器需包含两个版本的PostgreSQL服务器(详见man pg_upgrade)。升级过程需初始化全新数据目录(自动在/var/lib/pgsql/data创建,通常为外部挂载点),通过启动新旧服务器并"转储-恢复"数据实现,需大量复制文件。可通过POSTGRESQL_UPGRADE指定升级方式:
copy
数据文件从旧目录复制到新目录。升级失败时数据丢失风险低。
hardlink
数据文件通过硬链接从旧目录关联到新目录,性能更优,但升级失败时旧目录将不可用。
注意:升级需足够存储空间,空间不足可能导致数据丢失。
可通过source-to-image扩展本镜像。例如,使用~/image-configuration/中的配置构建自定义镜像new-postgresql:
$ s2i build ~/image-configuration/ postgresql new-postgresql
传递给s2i build的目录可包含以下一个或多个子目录:
postgresql-pre-start/容器启动初期(PostgreSQL守护进程未运行时)会加载此目录下的所有*.sh文件。
postgresql-cfg/此目录下的配置文件(*.conf)将被包含在镜像的postgresql.conf文件末尾。
postgresql-init/数据库首次初始化(initdb成功后数据目录非空)时,会加载此目录下的shell脚本(*.sh)。加载时本地PostgreSQL服务器已运行。对于持久化数据目录的重新部署,脚本不会加载(无操作)。
postgresql-start/语义与postgresql-init/相同,但始终加载(在postgresql-init/脚本之后,若存在)。
构建过程中,所有文件会复制到新镜像的
/opt/app-root/src目录。同名文件用户提供的版本优先于/usr/share/container-scripts/中的默认文件,可覆盖默认配置。
PostgreSQL守护进程初期将日志输出到标准输出,可通过以下命令查看容器日志:
docker logs <container>
之后日志会重定向到日志收集进程,存储在pg_log目录。
此容器镜像的Dockerfile及源码可在[***]Dockerfile,RHEL的Dockerfile名为Dockerfile.rhel7。
免费版仅支持 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