基于docker的mongo-db开启授权密码访问

基于docker安装mongo比较简单,但是如果给mongo开启密码访问,就有点复杂。
具体操作如下:

1、拉取docker-mongo官方镜像

 docker pull mongo:3.2.14

2、基于mongo3.x部署容器

docker run --name mongo -p 27017:27017 -v /data/database/mongotest:/data -d mongo:3.2.14 --auth

–antu的参数的意义是开启密码授权访问。

[root@centos ~]# docker run --name mongo4 -p 27019:27017 -v /data/database/mongotest:/data -d mongo:3.2.14 --auth
7ef3e635091f0671bad3ac9505cafc0444d2ac41dbfe1b2e0bdc149de3bd1fff

3、开启密码访问验证。

开启密码访问验证,需要开启mongo的admin数据库,切换到mongo的admin数据库
直接使用docker命令进入:

docker exec -it mongo bash

docker exec -it mongo bash 表示bash方式进入mongo容器。

进入后输入mongo命令进入mongo数据库

root@1c46563d7d36:/# mongo
MongoDB shell version: 3.2.14
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
> 

输入命令进入admin数据库

use admin

之后创建一个用户

db.createUser({ 
    user: 'mongo-admin', 
    pwd: 'mongo-password', 
    roles: [ { role: "root", db: "admin" } ] });
 db.auth("mongo-admin","mongo-password")

role后面的参数参考,可根据时间情况选择:

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

之后可以创建普通用户执行如下三条语句即可:

use test
db.createUser({ user: 'test', pwd:'test', roles: [ {role:"readWrite",db:"testdb"}]});
db.auth("test","test")

执行之后,为testdb数据库创建了密码访问。
开启了用户名和密码访问之后,mongo数据可以匿名连接,但是无法操作数据库。

你可能感兴趣的:(docker)