
目录
[一、环境前置检查(Anolis 8.10)](#一、环境前置检查(Anolis 8.10))
[1. 安装 Docker & 启动服务(已经安装的忽略)](#1. 安装 Docker & 启动服务(已经安装的忽略))
[2. 防火墙放行端口(可选,外部访问需配置)](#2. 防火墙放行端口(可选,外部访问需配置))
[二、拉取 PostgreSQL 15 官方镜像](#二、拉取 PostgreSQL 15 官方镜像)
[四、两种部署方式(推荐 docker run 快速部署)](#四、两种部署方式(推荐 docker run 快速部署))
[方式 1:docker run 一键启动(最简生产可用)](#方式 1:docker run 一键启动(最简生产可用))
[方式 2:docker-compose 部署(多服务推荐)](#方式 2:docker-compose 部署(多服务推荐))
[六、登录 PostgreSQL 数据库使用](#六、登录 PostgreSQL 数据库使用)
[1. 容器内部 psql 登录](#1. 容器内部 psql 登录)
[2. 宿主机安装客户端远程连接(外部访问)](#2. 宿主机安装客户端远程连接(外部访问))
[3. 基础 SQL 测试(验证可用)](#3. 基础 SQL 测试(验证可用))
七、外部客户端远程访问配置(Navicat/DBeaver)
一、环境前置检查(Anolis 8.10)
1. 安装 Docker & 启动服务(已经安装的忽略)
bash
# 安装docker
dnf install -y docker-ce docker-ce-cli containerd.io
# 开机自启+立即启动
systemctl enable --now docker
# 验证docker
docker info
2. 防火墙放行端口(可选,外部访问需配置)
bash
# 放行5432端口
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
二、拉取 PostgreSQL 15 官方镜像
docker pull postgres:15
# 查看镜像
docker images | grep postgres
三、持久化数据目录(关键,防止容器删除数据丢失)
bash
# 创建宿主机存储目录
mkdir -p /data/postgres15/{data,conf}
# 赋予权限(postgres容器内运行用户UID=999)
chmod 700 /data/postgres15/data
chown 999:999 /data/postgres15/data
四、两种部署方式(推荐 docker run 快速部署)
方式 1:docker run 一键启动(最简生产可用)
bash
docker run -d \
--name postgres15 \
--restart always \
-p 5432:5432 \
-v /data/postgres15/data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD="Root@123456" \
-e POSTGRES_USER="postgres" \
-e POSTGRES_DB="default_db" \
-e TZ=Asia/Shanghai \
postgres:15
参数说明:
--restart always:服务器重启自动拉起数据库-p 5432:5432:宿主机端口映射POSTGRES_PASSWORD:数据库超级管理员密码(自行修改)TZ=Asia/Shanghai:统一时区,避免时间偏移
方式 2:docker-compose 部署(多服务推荐)
- 创建编排文件
bash
cat > /data/postgres15/docker-compose.yml <<EOF
services:
postgres15:
image: postgres:15
container_name: postgres15
restart: always
ports:
- "5432:5432"
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: Root@123456
POSTGRES_USER: postgres
POSTGRES_DB: default_db
TZ: Asia/Shanghai
EOF
- 启动 / 停止
bash
# 启动
cd /data/postgres15
docker compose up -d
# 停止
docker compose down
# 重启
docker compose restart
五、验证容器运行状态
# 查看容器
docker ps | grep postgres15
# 查看日志(排查启动失败)
docker logs postgres15
六、登录 PostgreSQL 数据库使用
1. 容器内部 psql 登录
# 进入容器执行psql
docker exec -it postgres15 psql -U postgres -d default_db
2. 宿主机安装客户端远程连接(外部访问)
bash
dnf install -y postgresql
# 本地连接
psql -h 127.0.0.1 -p 5432 -U postgres -d default_db
# 远程服务器连接替换IP
psql -h 宿主机IP -p 5432 -U postgres
3. 基础 SQL 测试(验证可用)
sql
-- 创建测试表
CREATE TABLE test (id INT, name VARCHAR(32));
-- 插入数据
INSERT INTO test VALUES (1, 'Anolis8 docker pg15');
-- 查询
SELECT * FROM test;
七、外部客户端远程访问配置(Navicat/DBeaver)
默认 PostgreSQL 仅允许本地访问,需修改配置开放外网:
- 进入容器编辑配置文件
bash
docker exec -it postgres15 bash
# 编辑访问控制
vi /var/lib/postgresql/data/pg_hba.conf
# 在文件末尾添加,允许所有IP密码登录
host all all 0.0.0.0/0 scram-sha-256
# 编辑监听地址
vi /var/lib/postgresql/data/postgresql.conf
# 修改监听地址
listen_addresses = '*'
- 重启容器生效
bash
docker restart postgres15
八、日常运维常用命令
bash
# 备份数据库
docker exec postgres15 pg_dump -U postgres default_db > /data/postgres15/backup.sql
# 恢复备份
cat /data/postgres15/backup.sql | docker exec -i postgres15 psql -U postgres -d default_db
# 停止容器
docker stop postgres15
# 删除容器(数据在宿主机不会丢失)
docker rm postgres15
九、常见启动问题排查
- 数据目录权限报错 报错日志:
initdb: error: directory "/var/lib/postgresql/data" exists but is not empty解决:执行chown 999:999 /data/postgres15/data - 外部无法连接 检查两点:防火墙 5432 放行、pg_hba.conf+listen_addresses 配置正确
- 时区不对 启动参数必须携带
-e TZ=Asia/Shanghai,重启容器生效