MongoDB的安装(使用docker安装)与连接(访问权限问题)

@TOC

安装docker

在系统中安装docker,再使用docker对MongoDB进行安装)

  1. 使用官方安装脚本自动安装docker
    安装命令如下:
    来自阿里云的一键安装命令

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    

    也可以使用国内 daocloud 一键安装命令:

    curl -sSL https://get.daocloud.io/docker | sh
    

    安装成功

  2. 安装成功后,启动docker

    sudo systemctl start docker
    

    启动成功后就可以进行docker 的使用了

安装MongoDB

  1. Docker 安装 MongoDB
    访问 MongoDB镜像库地址 可以通过 Sort by 查看其他版本的 MongoDB
    默认是最新版本 mongo:latest

    i.拉取官方的最新版本的镜像:

    docker pull mongo:latest
    

    docker pull [镜像名]:[镜像版本] latest或不填写 均为拉取最新版本镜像

    ii.查看本地镜像
    docker images拉取MongoDB镜像成功
    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,键值对之间通过&或;(分号)隔开

菜鸟教程—CentOS Docker 安装

菜鸟教程—Docker 安装 MongoDB

MongoDB官网

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值