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,重启容器生效
相关推荐
一技安身1 天前
【Docker】 镜像导出 & 导入,实验环境aarch64(arm64)Linux操作系统
linux·docker·容器
鹤落晴春1 天前
【K8s】从 ConfigMap 到 Argo CD:Kubernetes 配置管理链路
运维·云原生·容器·kubernetes
ezreal_pan1 天前
Pod 重启多场景复盘:OOM、日志阻塞、并发 map 读写导致程序崩溃
docker·k8s
玉宇夕落1 天前
Docker + Milvus,数据库永久存放记忆,让对话历史永不丢失
数据库·docker·llm
梦想平凡1 天前
百游棋牌源代码开发搭建教程(二):PostgreSQL安装、业务表创建与版本化迁移
数据库·游戏·postgresql
名字还没想好☜1 天前
Docker 镜像瘦身进阶:用 distroless/scratch 把 Go 服务打到 10MB,以及没 shell 怎么调试
运维·docker·容器·golang·kubernetes
JavaPub-rodert1 天前
Docker 深入理解:从容器原理到生产环境最佳实践
运维·docker·容器
暖核2 天前
Docker 入门|吃透容器生态与底层原理
运维·docker·容器
滕州市燕猫虎计算机科技工作室个体工商户2 天前
Docker常用命令
运维·docker·容器
wdfk_prog2 天前
lely-canopen-rtt:为什么推荐在 RT-Thread 上使用 Lely CANopen 构建主站
java·运维·缓存·docker·容器