美文网首页php
在docker中运行mongoDB

在docker中运行mongoDB

作者: wwmin_ | 来源:发表于2020-07-20 14:33 被阅读0次
  1. 查看最新镜像
    访问MongoDB镜像仓库地址:https://hub.docker.com/_/mongo?tab=tags&page=1

也可也使用docker search mongo命令查看可用版本

  1. 获取最新版MongoDB镜像
docker pull mogo:latest
  1. 查看本地镜像
docker images
  1. 运行容器
 docker run -itd --name mongo -p 27017:27017 mongo --auth

参数说明 :

  • -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
  • --auth:需要密码才能访问容器服务。
  1. 安装成功
    通过dockers ps命令查看容器的运行信息

    接着使用以下命令添加用户和设置密码,并且尝试连接。
docker exec -it mongo mongo admin
# 创建一个名为 admin,密码为 111111的用户。
>  db.createUser({ user:'admin',pwd:'111111',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
# 尝试使用上面创建的用户信息进行连接。
> db.auth('admin', '111111')
连接mongoDB

此时的admin用户还没有读写权限,需要如下配置

$ mongo
> use admin
> db.createUser(
  {
    user: "admin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

当运行db.stats() 或者 show users,你可能会遇到错误 not authorized on admin to execute command...

> db.stats()
{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { dbstats: 1.0, scale: undefined }",
        "code" : 13,
        "codeName" : "Unauthorized"
}

原因是用户admin没有授予readorreadWrite权限,可以如下设置

> db.auth("admin", "111111")
> db.grantRolesToUser("admin", [ { role: "readWrite", db: "admin" } ])

此时可以运行db.stats() 或者 show users

> db.stats()
{
        "db" : "admin",
        "collections" : 2,
        "views" : 0,
        "objects" : 3,
        "avgObjSize" : 228.66666666666666,
        "dataSize" : 686,
        "storageSize" : 73728,
        "numExtents" : 0,
        "indexes" : 3,
        "indexSize" : 77824,
        "scaleFactor" : 1,
        "fsUsedSize" : 17707601920,
        "fsTotalSize" : 269490393088,
        "ok" : 1
}

> show users
{
        "_id" : "admin.admin",
        "userId" : UUID("1e4ba143-f9ba-4296-b8da-968cd1005115"),
        "user" : "admin",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                },
                {
                        "role" : "readWrite",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}

附:添加用户时各个角色对应权限

1.数据库用户角色:read、readWrite;
2.数据库管理角色:dbAdmin、dbOwner、userAdmin;
3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4.备份恢复角色:backup、restore
5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6.超级用户角色:root

  • 创建数据库用户
    首先保证你已经以用户管理员的身份登录 admin 数据库。然后用 use 命令切换到目标数据库,同样用 db.createUser() 命令来创建普通用户,其中角色名为 “readWrite”。
    下面是一个例子:
> use test
switched to db test
> db.createUser({user:"testuser",pwd:"testpass",roles:["readWrite"]})
Successfully added user: { "user" : "testuser", "roles" : [ "readWrite" ] }
> db.auth("testuser","testpass")
1

如果在GUI客户端中看不到Collection则可能是登录的用户名密码没有那个database的权限,需要对应的database的用户名密码连接串登录。

  1. 使用compass客户端
    官网下载地址:https://www.mongodb.com/products/compass
    安装成功之后,选择New Connection 然后选择右侧的Fill in connection fields individually
新建连接客户端
输入自己的配置,如果客户端设置了密码登录,Authentication选择Username/Password并输入用户名密码,然后点击CONNECT
连接串设置

进入数据库之后选择admin的database(因为我们在前面设置用户admin时只在admin 的database下给了权限),

注意:如果想查看修改普通数据库,则需要登录连接串需要修改成普通用户名和密码登录

admin-database

新建collection


新建test collections

后面的操作此处省略了,可以到官网去学习
这里补充一下MongoDB和关系型数据库一些概念对应关系

MongoDB 关系型数据库
Database Database
Collection Table
Document Row
Field Field

相关文章

网友评论

    本文标题:在docker中运行mongoDB

    本文链接:https://www.haomeiwen.com/subject/zfvekktx.html