本学期的数据库系统原理课程需要使用Docker配置OpenGauss,按照老师发布的Windows版教程实践下来发现了一些问题,于是便诞生了本文。
运行环境
操作系统:Ubuntu 24.04.2 LTS x86_64
内核版本:Linux 6.11.0-19-generic
Shell:zsh 5.9
Docker版本:28.0.1 build 068a01e
Navicat版本:Navicat Premium Lite 17.2.1
安装与配置Docker
如果你已经安装Docker并且配置完毕,请跳过此段。Ubuntu用户可参考这里,使用apt存储库安装Docker。
配置镜像源加速
不过在运行hello-world
镜像来验证安装是否成功的时候,你大概率会看到这样的报错:
1 | Unable to find image 'hello-world:latest' locally |
这是因为国内从DockerHub拉取镜像较为困难,我们需要配置国内可用的镜像源:
-
编辑Docker配置文件
/etc/docker/daemon.json
如果本地没有配置文件,可按照下面的方法进行创建:
1
2
3
4
5
6
7
8
9
10
11
12sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.1panel.live"
]
}
EOF -
重新加载并重启Docker服务:
1
2sudo systemctl daemon-reload
sudo systemctl restart docker -
再次拉取
Hello-world
镜像,可以成功安装:1
sudo docker pull hello-world
若使用Docker Desktop,可参照此教程配置镜像源。
配置用户组(可选)
我们发现,每次执行docker
命令都需要加上sudo
,有些繁琐。我们可以将用户添加到Docker用户组,我们就无需sudo
即可执行docker
命令:
-
在系统中创建
docker
用户组:1
sudo groupadd docker
-
将用户添加到
docker
用户组:1
sudo usermod -aG docker $USER
-
更新用户组:
1
newgrp docker
-
查看是否添加成功:
1
groups
出现
docker
即表明添加成功:
通过Docker安装OpenGauss
配置OpenGauss容器
-
拉取OpenGauss镜像:
1
docker pull enmotech/opengauss:latest
-
创建OpenGauss容器:
1
docker run --name opengauss --privileged=true -d -e GS_PASSWORD=opengaussDB@1234 -v /home/{username}/db/opengaussdata:/var/lib/opengauss -p 15432:5432 enmotech/opengauss:latest
GS_PASSWORD
参数设置了OpenGauss数据库超级用户omm
以及测试用户gaussdb
的密码。密码有复杂度要求,长度密码要求8个字符及以上,必须同时包含英文字母大小写、数字、以及特殊符号。opengaussDB@1234
为我自己设置的密码,你可以根据规则自行修改;-v /home/user/db/opengaussdata:/var/lib/opengauss
表示将容器内的/var/lib/opengauss
路径映射到本机的/home/{username}/db/opengaussdata
路径上,可以自行设置对应路径;-p 15432:5432
表示将容器内的5432
端口映射到15432
端口,供本机使用。配置完成后,容器会自动运行
-
启动容器
查看容器是否正常运行:
1
docker ps
出现下图表示容器已经正常运行
若找不到容器,可以执行下面的命令重启容器,
{xxx}
表示容器ID的前三位,如上图的容器ID前三位为214
1
docker restart {xxx}
如果忘记容器ID,可以通过下面的命令列出所有的容器:
1
docker ps -a
配置用户
在我的实践过程中,本地无法通过测试用户gaussdb
和刚才配置的密码进行连接数据库,提示密码与用户名无效:
我们需要进入容器中自行配置用户
-
执行下面命令进入容器:
1
docker exec -it opengauss bash
-
进入容器中的omm超级用户,通过
gsql
访问数据库,5432
为容器内部端口。1
2su - omm
gsql -d postgres -p5432 -
创建用户,下面的用户名和密码可自行修改:
1
CREATE USER aurorallz PASSWORD 'Llz@114514';
因为我已经创建过一次,此处提示用户已存在。
通过Navicat连接数据库
启动Navicat,连接名称自取,端口为先前设置的15432
,用户名和密码即为我们上一节中在容器内设置的。连接成功!
无法通过测试用户gaussdb进行连接的猜测
这篇文章中提到,测试用户gaussdb
是在entrypoint.sh
中自定义创建的用户,猜测是entrypoint.sh
脚本未能正常执行,导致测试用户gaussdb
未能正确建立,因此无法通过测试用户gaussdb
进行连接。如果你对此有想法,欢迎到评论区讨论~
参考资料
在Docker中快速体验openGauss数据库——小麦苗DB宝
Unbuntu22.04 使用 Docker 安装 OpenGauss——Tiancy
通过Docker安装openGauss(Windows篇)——Sinkhorn