Anolis OS 8.10 Docker 部署 PostgreSQL 15 完整实操

目录

[一、环境前置检查(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 部署(多服务推荐)

  1. 创建编排文件
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
  1. 启动 / 停止
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 仅允许本地访问,需修改配置开放外网:

  1. 进入容器编辑配置文件
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 = '*'
  1. 重启容器生效
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

九、常见启动问题排查

  1. 数据目录权限报错 报错日志:initdb: error: directory "/var/lib/postgresql/data" exists but is not empty 解决:执行 chown 999:999 /data/postgres15/data
  2. 外部无法连接 检查两点:防火墙 5432 放行、pg_hba.conf+listen_addresses 配置正确
  3. 时区不对 启动参数必须携带 -e TZ=Asia/Shanghai,重启容器生效
相关推荐
JavaPub-rodert16 小时前
Go 后台如何同时兼容 MySQL、PostgreSQL、SQLite 和 SQL Server?从 ShiyuAdmin 看 GORM 多数据库适配
数据库·mysql·postgresql·golang·javapub·王仕宇
瀚高PG实验室16 小时前
SQL优化案例:存储过程、复杂SQL拆成简单SQL提升整体性能
数据库·sql·postgresql·瀚高数据库
winfredzhang16 小时前
从零构建家庭照片管理系统:Django 模块化单体实战,以及我踩到的 4 个真实坑
python·postgresql·django·sqlite·bootsrap
Wang's Blog16 小时前
PostgreSQL笔记36:执行计划基础解读与优化器成本模型
数据库·笔记·postgresql
Wang's Blog17 小时前
PostgreSQL笔记35:索引常见问题诊断与解决方案全景解析
数据库·笔记·postgresql
艾伦_耶格宇18 小时前
【DOCKER容器实战】-2MySQL
运维·docker·容器
禅口魔心19 小时前
RK3576开发——Docker部署
docker·嵌入式linux
Wang's Blog20 小时前
PostgreSQL笔记38:慢查询定位与优化的系统方法论
数据库·笔记·postgresql
随便做点啥20 小时前
32卡×4090 24GB,Qwen3.8-27B-FP8 集群部署报告
服务器·经验分享·docker·vllm
Wang's Blog21 小时前
PostgreSQL笔记37:数据库性能瓶颈排查方法论与工具链
数据库·笔记·postgresql