@TOC
安装docker
在系统中安装docker,再使用docker对MongoDB进行安装)
使用官方安装脚本自动安装docker
安装命令如下:
来自阿里云的一键安装命令curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
安装成功后,启动docker
sudo systemctl start docker启动成功后就可以进行docker 的使用了
安装MongoDB
Docker 安装 MongoDB
访问 MongoDB镜像库地址 可以通过 Sort by 查看其他版本的 MongoDB
默认是最新版本 mongo:latesti.拉取官方的最新版本的镜像:
docker pull mongo:latestdocker pull [镜像名]:[镜像版本]latest或不填写 均为拉取最新版本镜像ii.查看本地镜像
docker images
iii.运行MongoDB容器docker run -itd --name mongo -p 27017:27017 mongo --auth--name mongo:对运行的mysql容器进行命名
-p 27017:27017:映射容器服务的 27017端口到宿主机的 27017端口,外部主机可以直接通过 宿主机ip:27017访问到 MongoDB的服务。
mongo: 为本地镜像的名称 如果不是最新版本镜像 请使用mongo:[版本号]
--auth:需要密码才能访问容器服务。
通过 docker ps 命令查看是否安装成功
接着使用以下命令添加用户和设置密码,并且尝试连接。
docker exec -it mongo mongo admin
创建一个名为 admin,密码为 123456 的用户。
db.createUser({ user:‘admin’,pwd:‘123456’,roles:[ { role:‘userAdminAnyDatabase’, db: ‘admin’},“readWriteAnyDatabase”]});
尝试使用上面创建的用户信息进行连接。
db.auth(‘admin’, ‘123456’)

后续连接的问题
mongodb://[username:password@]host1[:port1][/database][/[defaultauthdb][?options]]
mongodb?/ 这是固定的格式,必须要指定。
username:password@可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库
host1必须的指定至少一个host, 即IP地址,是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
port1可选的指定端口,如果不填,默认为27017
/database如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
?options是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

在编写node使用mongoose进行连接MongoDB数据库时,出现了以下情况
在没有设置数据库账号密码的情况下会显示可以连接成功,不过访问不到数据
// 连接数据库 如果不自己创建 默认test数据库会自动生成
mongoose.connect('mongodb://<ip地址>:27017/test',{ useNewUrlParser: true, useUnifiedTopology: true });
这是肯定的 --auth:需要密码才能访问容器服务。
在设置了数据库的账号密码的情况下连接成功,也获取不到数据
admin: 用户名
123456: 密码
27017: 默认使用的端口
mongoose.connect('mongodb://admin:123456@<ip地址>:27017/test',{ useNewUrlParser: true, useUnifiedTopology: true });
这是为什么呢?
这是因为我们没有指定该数据库管理员账号属于哪个库中,导致其寻找不到,从而获取不到数据。
我们需要指定我们使用的账户名密码属于了哪个库里
需要加上这样一个参数:authSource=admin
参数
authSource,描述是:If the database authentication is dependent on
another databaseName.
意思是如果数据库认证需要依赖于另外一个数据库名称。数据库账号密码不是存储admin数据库,而我们现在需要连接的是另外一个数据库,加这个参数authSource=admin。
最终的连接语句应该为
mongodb://[username:password@]<ip地址>:<端口>/<要连接的数据库名称>?authSource=admin
mongodb://[username:password@]host1[:port1][/database][/[defaultauthdb][?options]]
mongodb?/ 这是固定的格式,必须要指定。
username:password@可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库
host1必须的指定至少一个host, 即IP地址,是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
port1可选的指定端口,如果不填,默认为27017
/database如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
?options是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开