@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:latest
docker 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,键值对之间通过&或;(分号)隔开