pixelfederation/postgresqlpostgres用户密码Dockerfile用于创建Docker容器镜像,运行PostgreSQL数据库。
PostgreSQL是一个对象关系型数据库管理系统(ORDBMS),强调可扩展性和标准合规性[来源]。
如果您觉得此镜像有用,您可以通过以下方式提供帮助:
在报告问题前,请尝试将Docker更新到最新版本,查看是否解决问题。有关Docker安装说明,请参考安装指南。
SELinux用户应尝试使用setenforce 0命令禁用SELinux,查看是否解决问题。
如果上述建议无法解决问题,请提交问题并提供以下信息:
docker version和docker info命令的输出docker run命令或docker-compose.yml文件(请隐藏敏感信息)推荐通过Dockerhub的自动构建获取镜像:
注意:镜像也可在Quay.io获取
bashdocker pull docker.pixelfederation.com/kube/postgresql:9.5
或者您也可以手动构建镜像:
bashdocker build -t docker.pixelfederation.com/kube/postgresql github.com/docker.pixelfederation.com/kube/docker-postgresql
使用以下命令启动PostgreSQL:
bashdocker run --name postgresql -itd --restart always \ --publish 5432:5432 \ --volume /srv/docker/postgresql:/var/lib/postgresql \ docker.pixelfederation.com/kube/postgresql:9.5
通过以下命令登录PostgreSQL服务器:
bashdocker exec -it postgresql sudo -u postgres psql
或者,您可以使用示例docker-compose.yml文件通过Docker Compose启动容器
为使PostgreSQL在容器关闭和启动后保留状态,需挂载卷到/var/lib/postgresql。
快速启动命令已包含持久化卷挂载。
SELinux用户应更新主机挂载点的安全上下文,以确保与Docker兼容:
bashmkdir -p /srv/docker/postgresql chcon -Rt svirt_sandbox_file_t /srv/docker/postgresql
默认情况下,连接PostgreSQL服务器需要密码验证。如需信任本地网络连接,可使用PG_TRUST_LOCALNET变量:
bashdocker run --name postgresql -itd --restart always \ --env 'PG_TRUST_LOCALNET=true' \ docker.pixelfederation.com/kube/postgresql:9.5
注意
此处的本地网络指容器所连接的网络,具体含义取决于启动容器时指定的
--net参数。在默认配置中,此参数将信任docker0桥接网络上的其他容器连接。
postgres用户密码默认情况下,postgres用户未设置密码,因此只能本地登录PostgreSQL服务器。如需远程以postgres用户登录,需通过PG_PASSWORD变量设置密码:
bashdocker run --name postgresql -itd --restart always \ --env 'PG_PASSWORD=passw0rd' \ docker.pixelfederation.com/kube/postgresql:9.5
注意
- 启用持久化时,
PG_PASSWORD仅在首次运行时生效。- 此功能仅在
latest版本和9.4-10以上版本可用。
启动容器时,通过指定DB_USER和DB_PASS变量可创建新的PostgreSQL数据库用户:
bashdocker run --name postgresql -itd --restart always \ --env 'DB_USER=dbuser' --env 'DB_PASS=dbuserpass' \ docker.pixelfederation.com/kube/postgresql:9.5
注意
- 创建的用户可远程登录
- 如未为用户指定密码,容器将报错
- 如用户已存在,将不做任何更改
- 每次启动只能创建一个用户
启动容器时,通过DB_NAME变量可创建新的PostgreSQL数据库:
bashdocker run --name postgresql -itd --restart always \ --env 'DB_NAME=dbname' \ docker.pixelfederation.com/kube/postgresql:9.5
默认情况下,数据库通过复制标准系统数据库template1创建。您可通过DB_TEMPLATE参数指定不同模板。有关详细信息,请参考模板数据库。
此外,通过在DB_NAME中指定逗号分隔的数据库名称列表,可创建多个数据库。例如,以下命令创建两个数据库dbname1和dbname2:
此功能仅在9.1-1以上版本可用
bashdocker run --name postgresql -itd --restart always \ --env 'DB_NAME=dbname1,dbname2' \ docker.pixelfederation.com/kube/postgresql:9.5
如同时指定DB_USER、DB_PASS和DB_NAME变量,DB_USER指定的用户将被授予DB_NAME列表中所有数据库的访问权限。注意:如用户或数据库不存在,将自动创建。
bashdocker run --name postgresql -itd --restart always \ --env 'DB_USER=dbuser' --env 'DB_PASS=dbuserpass' \ --env 'DB_NAME=dbname1,dbname2' \ docker.pixelfederation.com/kube/postgresql:9.5
在上述示例中,dbuser将被授予dbname1和dbname2数据库的访问权限。
此镜像包含postgres contrib模块。可通过DB_EXTENSION参数指定逗号分隔的模块列表:
bashdocker run --name postgresql -itd \ --env 'DB_NAME=db1,db2' --env 'DB_EXTENSION=unaccent,pg_trgm' \ docker.pixelfederation.com/kube/postgresql:9.5
上述命令将在DB_NAME指定的db1和db2数据库上启用unaccent和pg_trgm模块。
注意:
此选项替代了
DB_UNACCENT参数。
与创建数据库用户类似,通过指定REPLICATION_USER和REPLICATION_PASS变量可创建PostgreSQL复制用户:
bashdocker run --name postgresql -itd --restart always \ --env 'REPLICATION_USER=repluser' --env 'REPLICATION_PASS=repluserpass' \ docker.pixelfederation.com/kube/postgresql:9.5
与创建数据库用户类似,通过指定BACKUP_USER和BACKUP_PASS变量可创建PostgreSQL备份用户:
bashdocker run --name postgresql -itd --restart always \ --env 'BACKUP_USER=backupuser' --env 'BACKUP_PASS=backupuserpass' \ docker.pixelfederation.com/kube/postgresql:9.5
注意
- 创建的用户可远程登录
- 如未为用户指定密码,容器将报错
- 如用户已存在,将不做任何更改
- 每次启动只能创建一个用户
即使不打算立即使用复制功能,创建复制用户也是个好主意,以便在需要时设置从节点、生成快照或备份。
容器默认启动为复制集群的主节点,可在需要时扩展PostgreSQL数据库后端而不中断服务。但需确保主节点存在复制用户。
首先创建集群的主节点:
bashdocker run --name postgresql-master -itd --restart always \ --env 'DB_USER=dbuser' --env 'DB_PASS=dbuserpass' --env 'DB_NAME=dbname' \ --env 'REPLICATION_USER=repluser' --env 'REPLICATION_PASS=repluserpass' \ docker.pixelfederation.com/kube/postgresql:9.5
注意:启动主节点时无需指定额外参数。
创建复制从节点需设置REPLICATION_MODE=slave,并指定REPLICATION_HOST、REPLICATION_PORT、REPLICATION_SSLMODE、REPLICATION_USER和REPLICATION_PASS变量:
创建从节点:
bashdocker run --name postgresql-slave01 -itd --restart always \ --link postgresql-master:master \ --env 'REPLICATION_MODE=slave' --env 'REPLICATION_SSLMODE=prefer' \ --env 'REPLICATION_HOST=master' --env 'REPLICATION_PORT=5432' \ --env 'REPLICATION_USER=repluser' --env 'REPLICATION_PASS=repluserpass' \ docker.pixelfederation.com/kube/postgresql:9.5
上述命令使用Docker链接,使主节点可通过master别名在REPLICATION_HOST中引用。
注意
REPLICATION_PORT默认值为5432REPLICATION_SSLMODE默认值为preferREPLICATION_USER和REPLICATION_PASS的值需与主节点指定的值相同- 启用持久化时,如容器停止后重启,需确保环境变量中定义
REPLICATION_MODE=slave,否则从节点配置将被关闭,节点将允许写入并保留与主节点的最后同步数据。
通过以上步骤,您已轻松设置PostgreSQL复制集群。可创建更多从节点实现水平扩展。
PostgreSQL复制集群的重要说明:
与创建复制从节点类似,通过指定REPLICATION_MODE=snapshot可创建主节点的快照。
按照设置复制集群创建主节点后,可使用以下命令创建快照:
bashdocker run --name postgresql-snapshot -itd --restart always \ --link postgresql-master:master \ --env 'REPLICATION_MODE=snapshot' --env 'REPLICATION_SSLMODE=prefer' \ --env 'REPLICATION_HOST=master' --env 'REPLICATION_PORT=5432' \ --env 'REPLICATION_USER=repluser' --env 'REPLICATION_PASS=repluserpass' \ docker.pixelfederation.com/kube/postgresql:9.5
从节点与快照的区别:从节点为只读,会随主节点数据更新而更新(流复制);快照为可读写,在从主节点初始快照数据后不再更新。
此功能适用于开发人员快速快照生产数据库当前状态,用于开发/调试而不影响生产实例数据。
与设置从节点或生成快照类似,通过指定REPLICATION_MODE=backup可创建主节点数据备份。
备份通过pg_basebackup使用复制协议生成。
按照设置复制集群创建主节点后,可使用以下命令创建时间点备份:
bashdocker run --name postgresql-backup -it --rm \ --link postgresql-master:master \ --env 'REPLICATION_MODE=backup' --env 'REPLICATION_SSLMODE=prefer' \ --env 'REPLICATION_HOST=master' --env 'REPLICATION_PORT=5432' \ --env 'REPLICATION_USER=repluser' --env 'REPLICATION_PASS=repluserpass' \ --volume /srv/docker/backups/postgresql.$(date +%Y%m%d%H%M%S):/var/lib/postgresql \ docker.pixelfederation.com/kube/postgresql:9.5
备份生成后,容器将退出,主节点数据备份将保存在/srv/docker/backups/postgresql.XXXXXXXXXXXX/。恢复备份需启动一个使用/srv/docker/backups/postgresql.XXXXXXXXXXXX中数据的容器。
可在docker run命令中指定postgres参数来自定义PostgreSQL服务器启动命令。例如,以下命令启用连接日志:
bashdocker run --name postgresql -itd --restart always \ docker.pixelfederation.com/kube/postgresql:9.5 -c log_connections=on
有关可用选项的完整列表,请参考postgres文档。
默认情况下,PostgreSQL服务器日志输出到标准输出。使用命令行参数功能,可通过-c logging_collector=on参数将日志输出到文件:
bashdocker run --name postgresql -itd --restart always \ docker.pixelfederation.com/kube/postgresql:9.5 -c logging_collector=on
可使用docker exec访问PostgreSQL日志。例如:
bashdocker exec -it postgresql tail -f /var/log/postgresql/postgresql-9.4-main.log
容器创建的文件和进程由容器内部的postgres用户拥有。在Docker未启用用户命名空间的情况下,容器postgres用户的UID和GID在主机上可能有不同含义。
例如,主机上与容器postgres用户具有相同UID和/或GID的用户将能够访问从主机挂载的持久卷中的数据,并能终止容器启动的postgres服务器进程。
为解决此问题,可通过USERMAP_UID和USERMAP_GID变量分别指定容器postgres用户的UID和GID。
例如,要将容器postgres用户的UID和GID设置为999:
bashdocker run --name postgresql -itd --restart always \ --env 'USERMAP_UID=999' --env 'USERMAP_GID=999' \ docker.pixelfederation.com/kube/postgresql:9.5
如需升级到新版本:
bashdocker pull docker.pixelfederation.com/kube/postgresql:9.5
bashdocker stop postgresql
bashdocker rm -v postgresql
bashdocker run --name postgresql -itd \ [选项] \ docker.pixelfederation.com/kube/postgresql:9.5
为进行调试和维护,您可能需要访问容器的shell。如果使用Docker 1.3.0或更高版本,可通过docker exec启动bash访问运行中容器的shell

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务