Docker配置MongoDB
内容摘要
本文详细地描述了在CentOS 8上用docker部署MongoDB,并用studio-3T远程连接数据库的方法。并且根据可能会产生的问题提出了详细的解决方案。
前言
- 首先需要有Docker。如果没有,可以查阅Dokcer安装
- 读者需要学会docker的基本使用,包括挂载数据卷和配置虚拟网桥。如果没有,可以查阅Docker的理解与入门使用
系统环境
腾讯云4核4G轻量级服务器;CentOS 8
正文
进入Docker Hub注册dockerhub的账号并寻找mongo镜像,注册好后直接在搜索框里面搜索关键词
mongo
,获取命令1
docker pull mongo
利用1中的命令拉取镜像可以用以下命令查看拉取的镜像。
1
docker images
从镜像文档里面可知,该镜像的映射端口是27017,配置文件在
/data/configdb
,数据库文件在/data/db
里面。两个都是在容器里。这些文件实际上是需要存在于容器的对应目录下面的,所以如果在宿主机目录下每页找到,不用急,继续往下做就行。
需要配置挂载卷:
配置挂在卷的目录:
1
2
3
4
5
6
7创建目录
mkdir -p /var/lib/mongo/conf
mkdir -p /var/lib/mongo/logs
mkdir -p /var/lib/mongo/db
配置权限
chmod -R a+rwx /var/lib/mongo/创建配置文件并配置:
1
vi /var/lib/mongo/conf/mongod.conf
配置文件如下: mongodb配置详解(英文)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19storage:
dbPath: /data/mongo/db
indexBuildRetry: true # 如果mongoDB版本高于或等于4.4就不需要这行
journal:
enabled: true
commitIntervalMs: 100
where to write logging data.
systemLog:
path: /data/mongo/logs/mongod.log
logAppend: false
logRotate: rename
destination: file
network interfaces
net:
port: 27017
bindIp: 你的IP
bindIpAll: true- 注意: 配置远程连接(如studio-3T)的话,需要将这里的
bindIP
配置成0.0.0.0;
- 注意: 配置远程连接(如studio-3T)的话,需要将这里的
带认证地启动mongo镜像 虽然
/data
下面没有任何文件,但是在启动方面并没有出现问题1
2
3
4
5
6
7
8
9docker run --name mongo \
--restart=unless-stopped \
-v /var/lib/mongo:/data/mongo \
-p 27017:27017 \
-d \
--network datanet \
--network-alias mongo mongo \
--config /data/mongo/conf/mongod.conf \
--auth- 这一步我们配置了一个 容器名为
mongo
; 将宿主机的/var/lib/mongo
目录挂载到容器/data/mongo
; 将宿主机的27017
端口映射到容器27017
端口; 连接到虚拟网桥datanet
且虚拟网桥中名称为mongo
; 的MongoDB容器。
启动后可以用以下命令查看结果:
1
2
3docker ps -a # 查看所有容器状态,包括是否在运行
docker logs 容器ID # 查看日志,以便于找到问题- 这一步我们配置了一个 容器名为
创建管理员账号和普通员工账号 登录mongo数据库
1
docker exec -it mongo mongo admin
创建管理员用户
1
db.createUser({ user: 'nameOfAdmin', pwd: 'pwdOfAdmin', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
- 这里的
nameOfAdmin
和pwdOfAdmin
填写成你自己的想设置的管理员用户名和密码即可。
登录数据库以便于授权
1
db.auth("nameOfAdmin","pwdOfAdmin");
切换普通数据库(没有回自动创建),创建普通用户
1
2
3use test
db.createUser({ user: 'test', pwd: '123456', roles: [{ role: "readWrite", db: "test" }] });- 这里的
尝试在外界用studio-3T连接docker。(需要提前下载studio-3T软件(Robo-3T已经和studio-3T合并,全部免费了)) 主要要在云服务器安全组策略里面添加对应端口,比如这里开的就是27017.
读者可能遇到的问题
镜像下载速度太慢
因为docker hub的服务器在国外,所以可以通过获取阿里云的docker加速器解决。
进入阿里云镜像仓库获取镜像加速器;创建个人/企业实例后进入
镜像工具
-镜像加速器
,复制加速器地址进入
/etc/docker/daemon.json
添加地址(如果没有则在该目录下新建一个配置文件)1
2
3
4
5
6
7
8vi /etc/docker/daemon.json
文件内容
{
"registry-mirrors": ["https://xxxxxxx.aliyuncs.com"]
}
保存并关闭- 这里的url是你自己的url
重启docker并使其生效
1
2systemctl daemon-reload
systemctl restart docker配置完成,可以快速下载docker镜像了。
外部studio-3T无法连接
问题描述
无法在外界()通过studio-3T连接上云服务器docker环境下的mongodb。但在云服务器本身上面可以
以下方法可以检验是否是数据库的问题:
1
2
3
4
5 进入mongo中的admin数据库
docker exec -it mongo mongo admin
用账号密码登录admin数据库,结果会返回1(正常)
db.auth('hrxtest','hrx@123')等命令进入admin数据库,如果返回结果正常就不是数据库的问题,而是网络问题。
解决方案
连接超时还有可能是安全组没有开或者配置文件里的bindIp
没有设置成0.0.0.0,但是我没有控制变量试验过。可以检查一下。
- 可以参考网友的这篇文章:MongoDB远程连接