docker部署华为高斯数据库opengauss

在这里插入图片描述

前言:

最近有项目需求,需要在原先gorm适配6类国产数据库的基础上再追加一个 华为高斯数据库opengauss,所以需要成功部署相关的数据库服务,使用docker是很方便的方式

下面是一份完整、实用的 Docker Compose 部署华为 openGauss 数据库(适用于远程工具连接,如 Navicat) 的配置文档,含:
• 可用镜像说明
• docker-compose.yml 文件
• 数据挂载目录结构
• 初始化配置参数
• 远程连接设置(Navicat)
• 错误问题的排查与处理思路

✅ 一、准备镜像

华为官方发布的 openGauss 镜像在 Docker Hub 上可直接拉取:

docker pull enmotech/opengauss:3.1.0

此镜像维护较好,适合开发与测试环境。

🧱 二、目录结构准备

在宿主机上准备挂载目录,用于数据持久化与配置覆盖,我的目录结构大概是这样的:

/opt/docker-volumes/opengauss/
├── config/
│   ├── postgresql.conf #可写可不写,写了会覆盖容器内的文件(用于监听端口、ip地址等配置)
│   └── pg_hba.conf #可写可不写,写了会覆盖容器内的文件(用于远程连接工具访问权限的配置)
├── data/                 ← 自动生成或你手动清空后初始化
└── docker-compose.yml

📄 三、Docker Compose 文件

创建文件 /opt/docker-volumes/opengauss/docker-compose.yml,内容如下:
磁盘空间一定要留够,最少1G,不然数据库启动不起来。。。

version: "3.8"

services:
  opengauss:
    image: enmotech/opengauss:3.1.0
    container_name: opengauss
    restart: always
    ports:
      - "5432:5432"  # openGauss 默认端口
    environment:
      GS_PASSWORD: "Gauss@123"  # 设置数据库初始化密码(必须满足复杂度要求)
    volumes:
      - /opt/docker-volumes/opengauss/data:/var/lib/opengauss/data  # 数据目录挂载
      - /opt/docker-volumes/opengauss/config:/etc/opengauss  # 可选配置目录(如需覆盖配置)
    shm_size: 1g
    ulimits:
      nproc: 65535
      nofile:
        soft: 65535
        hard: 65535

🚀 四、启动命令

进入 docker-compose.yml 所在目录:

cd /opt/docker-volumes/opengauss
docker-compose up -d

查看容器状态:

docker ps

确认 opengauss 正常运行。

🔐 五、连接信息(用于 Navicat-omm用户无法连接,需要创建普通用户,授予相关权限连接–具体可往后面找 普通用户创建相关流程–往下划拉即可)

在这里插入图片描述
✅ Navicat 连接 PostgreSQL 时,只需填以上信息即可连接 openGauss。

openGauss 兼容 PostgreSQL 协议,所以使用 Navicat 选择 PostgreSQL 模式连接即可。

⚙️ 六、可选配置说明

虽然大多数参数可通过环境变量设置,但你也可以手动覆盖配置文件:
• 在 /opt/docker-volumes/opengauss/config/ 中放置如下配置(如 postgresql.conf、pg_hba.conf)
• 然后容器会在启动时读取该目录中的配置
• 如果需要配置,可填写:

cat <<EOF > /opt/docker-volumes/opengauss/config/postgresql.conf
# PostgreSQL-compatible parameters
listen_addresses = '*'
port = 5432
max_connections = 500
shared_buffers = 512MB
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = 'none'
EOF
cat <<EOF > /opt/docker-volumes/opengauss/config/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             0.0.0.0/0               md5
local   all             all                                     trust
EOF

或者简单点:

echo "listen_addresses = '*'" >> /opt/docker-volumes/opengauss/config/postgresql.conf
echo "host all all 0.0.0.0/0 md5" >> /opt/docker-volumes/opengauss/config/pg_hba.conf

⚠️ 默认该镜像已设置允许远程访问,通常无需再手动配置 listen_addresses。

🧪 七、测试连接(命令行)

也可以用 psql 命令测试连接:

docker exec -it opengauss bash

# 进入容器后
gsql -d postgres -U omm -W

✅ 八、总结

•	镜像使用:enmotech/opengauss:3.1.0
•	数据端口:5432
•	默认用户:omm,密码:Gauss@123
•	目录挂载:数据 /opt/opengauss/data
•	启动后可用 Navicat(PostgreSQL)远程连接

📌 九、补充:

关于 config 配置目录的必要性与内容

在 docker-compose.yml 中,我们挂载了如下目录:

/opt/docker-volumes/opengauss/config:/etc/opengauss

这个目录在 Enmotech 提供的 openGauss 镜像 中,其实是 可选的覆盖配置机制,用于:
• 覆盖默认的 postgresql.conf(数据库主配置文件)
• 覆盖默认的 pg_hba.conf(认证规则)
• 提供自定义的配置初始化逻辑(例如参数调优)

🧠 但实际运行中,如果你不需要自定义这些参数,该目录可以为空或不挂载,数据库也能正常工作。

✅ 如果你需要支持远程访问(Navicat 连接),建议你主动配置以下两个文件:

  1. postgresql.conf
  2. pg_hba.conf
    具体内容可参考上文中的信息

⚠️ 注意:如果你在 config 目录中放入了这两个文件,容器重启后它们会自动覆盖默认配置。

📌 关于默认连接用户 omm(经过实际使用–omm居然不允许远程连接访问,所以我们还需要自己建立可以远程访问的数据库用户名,并且授予相关的权限,具体可往后面找 普通用户创建相关流程–往下划拉即可)

omm 是 openGauss 默认创建的超级用户(superuser)。

这个用户:
• 等同于 PostgreSQL 中的 postgres 用户
• 拥有所有权限,可建库、建用户、管理权限
• 由镜像内初始化脚本自动创建,密码是你通过环境变量 GS_PASSWORD 设置的那个

如:

environment:
  GS_PASSWORD: "Gauss@123"

此时你登录:

psql -h 127.0.0.1 -U omm -p 5432 -W

即可使用数据库。

想创建其他用户?

你可以通过 gsql 或 Navicat 登录后运行 SQL:

CREATE USER myuser WITH PASSWORD 'MyPassword123';
GRANT ALL PRIVILEGES TO myuser;

✅ 创建普通用户,并运行远程连接访问

✅ 第一步:进入容器并切换到 omm 用户

docker exec -it opengauss bash
su - omm

✅ 第二步:连接数据库(不要使用 -W,它需要密码参数)

正确的命令是:

gsql -d postgres -r

说明:
• -d postgres:连接默认数据库
• -r:进入交互式 SQL 命令行
• 不要用 -U omm -W,因为你当前已经是 omm 用户,直接连接即可。

如果看到提示符变成:

gaussdb=#

说明连接成功!

✅ 第三步:一次性创建远程可连接的普通用户和数据库

-- 创建用户
CREATE USER navicat_user WITH PASSWORD 'Test@123';
-- 创建用户(一步到位,建立超管用户,省的为权限的事情烦恼)
CREATE USER gaussadmin WITH PASSWORD 'YourPassword123@' SYSADMIN;

-- 创建数据库并指定拥有者(超管用户就不用运行这个了)
CREATE DATABASE navicatdb OWNER navicat_user;

-- 授权(超管用户就不用运行这个了)
GRANT ALL PRIVILEGES ON DATABASE navicatdb TO navicat_user;

你也可以加一句明确允许登录:

#(超管用户就不用运行这个了)
ALTER ROLE navicat_user WITH LOGIN;

✅ 第四步:确保 pg_hba.conf 允许远程连接

在宿主机上,编辑文件(你之前挂载的是)

/opt/docker-volumes/opengauss/config/pg_hba.conf

确认包含这一行:

host    all             all             0.0.0.0/0               md5

✅ 第五步:重启容器,让配置生效

docker restart opengauss

✅ 第六步:Navicat 连接信息

在这里插入图片描述
在这里插入图片描述

✅ 最佳实践总结

在这里插入图片描述

✅ 容器启动遇到错误问题怎么处理:

✅ 快速排查,按以下步骤执行:

🔍 第一步:查看容器日志,根据日志再进行具体问题具体分析

立即执行以下命令查看详细报错信息:

docker logs opengauss

🔧 第二步:常见问题排查清单(先别急着改,建议搭配日志一起确认)

✅ 问题1:配置文件格式或权限错误

检查你刚才创建的 postgresql.conf 和 pg_hba.conf 是否:
• 文件编码为 UTF-8
• 没有奇怪的 Windows 换行符(用 dos2unix 转换)
• 文件内容是否完整、合法(粘贴内容是否有残缺)

🔧 修复命令(可全部执行):

dos2unix /opt/docker-volumes/opengauss/config/postgresql.conf
dos2unix /opt/docker-volumes/opengauss/config/pg_hba.conf
chmod -R 755 /opt/docker-volumes/opengauss/config
✅ 问题2:数据目录已被初始化 + 强行覆盖配置导致崩溃

Enmotech 的镜像在启动时会检查 /var/lib/opengauss/data,如果目录非空而你又配置了新的 postgresql.conf,可能导致冲突。

🔧 修复方法(⚠️会清空数据库数据!):

# 仅用于开发测试环境,生产环境请先备份!
rm -rf /opt/docker-volumes/opengauss/data/*

然后重新启动:

docker-compose down
docker-compose up -d
✅ 问题3:宿主机某些 Linux 安全机制(如 SELinux)阻止挂载或访问配置文件

如果你用的是 RHEL/CentOS,可以尝试加 😒 后缀允许容器访问:

volumes:
  - /opt/docker-volumes/opengauss/data:/var/lib/opengauss/data:z
  - /opt/docker-volumes/opengauss/config:/etc/opengauss:z

或临时关闭 SELinux:

setenforce 0

✅ 问题4:GS_PASSWORD 不符合 openGauss 安全策略

设置的密码是 Gauss@123,按道理是合规的(大小写 + 数字 + 特殊字符,长度 ≥8)

但建议你测试使用更复杂一点的,比如:

GS_PASSWORD: "Abcd1234@Gauss"

当然了,最重要的是

查看容器日志(docker logs opengauss),获取关键错误提示
根据日志对照上面 4 项原因排查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卜锦元

白嫖是人类的终极快乐,我也是

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值