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,重启容器生效
相关推荐
java_logo5 小时前
Docker 部署 CUPS Web:浏览器即可管理打印机与打印任务
docker·容器·打印机·轩辕镜像·cups web·cups web 镜像部署·cups web 部署教程
数据知道7 小时前
容器安全入门:Docker 逃逸原理与 5 个经典 CVE
安全·网络安全·docker·容器
run21professional9 小时前
Windows 11 + WSL + Docker Desktop 开发环境设置
运维·docker·容器
张忠琳9 小时前
【NPU】Ascend Docker Runtime v26.0.1 之三 runtime/dcmi/ — 超深度逐行分析
云原生·容器·kubernetes·npu·docker-runtime
giaming02311 小时前
告别Docker Desktop!一款轻量级原生开发环境管理工具:FlyEnv
运维·docker·容器
自强的小白11 小时前
Docker命令
java·docker·容器
暗影凋落13 小时前
docker-image 工具展示更详细镜像层内容
运维·docker·容器
夜郎king13 小时前
SpringBoot+PostgreSQL + 硅基流动大模型从零搭建 Text-to-SQL 智能问答系统
spring boot·postgresql·text-to-sql·llm大模型
极客先躯13 小时前
高级java每日一道面试题-2026年05月11日-实战篇[Docker]-如何容器化金融产品推荐系统?
java·运维·docker·容器·金融·高级面试·金融产品推荐系统