首页>软件资讯>常见问题

常见问题

MongoDB从入门到实战之Docker快速安装MongoDB

发布时间:2025-05-08 12:42:34人气:63

DotNetGuide编程学院

DotNetGuide编程学院是一个专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享的知识星球!当然这里不仅仅只有C#/.NET/.NET Core还有前端、云原生(Docker,K8s)、分布式,微服务、实用工具、学习书籍、AIGC、AI赋能、求职和招聘资讯、热点资讯等多个领域,我们致力于构建一个积极向上、和谐友善的.NET技术交流、学习平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。


大姚发放了100张DotNetGuide编程学院知识星球68元新人立减优惠券,有兴趣的小伙伴可以领券加入(当前应该是星球最优惠的阶段),加入后如果感觉不值得,3天内知识星球APP右上角退出,直接全额退款,无任何套路!


查看可用的MongoDB版本

访问DokcerHub中的MongoDB镜像库地址:https://hub.docker.com/_/mongo/tags

可以通过 Sort by 查看其他版本的MongoDB,查看最新版本MongoDB镜像(mongo:latest):https://hub.docker.com/_/mongo/tags?page=1&name=latest

查看mongodb版本.png


此外,我们还可以用docker search mongo命令来查看可用版本:

docker search mongo命令来查看可用版本.png


拉取最新版本的MongoDB镜像

注意假如你镜像拉取超时可以看看这里(多平台容器镜像代理服务):https://dockerproxy.github.io/#/index

docker pull mongo:latest

注意:tag是可选的,tag表示标签,多为软件的版本,默认是latest版本(最新版)

latest版本.png

https://hub.docker.com/_/mongo/tags?page=1&name=latest


验证MongoDB镜像是否成功拉取到本地

使用以下命令来查看MongoDB镜像是否成功拉取到本地:


docker images



创建并运行一个MongoDB容器

docker run -itd --name mongo-test -p 27017:27017 mongo --auth

参数说明:


-itd:其中,i是交互式操作,t是一个终端,d指的是在后台运行。

--name mongo-test:容器名称

-p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。

--auth:需要密码才能访问容器服务(注意:安全问题,MongoDB默认是不开启权限验证的,不过设置了这里就相当于修改MongoDB的配置auth=ture启用权限访问)。



进入创建的MongoDB容器

docker exec -it  mongo-test mongosh



MongoDB报错"ongoServerError: not authorized on admin to execute command"


MongoDB默认是不需要用户密码就可以连接的,如果使用命令报错"ongoServerError: not authorized on admin to execute command ",则表示当前登陆用户不具备相应权限。



解决办法:在admin数据库中通过创建一个用户,赋予用户root权限。


# 进入admin数据库

use admin

# 创建一个超级用户

db.createUser(

    {

        user:"root",

        pwd:"123456",

        roles:[{role:"root",db:"admin"}]

    }

);#授权登录db.auth('root','123456')



MongoDB用户权限管理

MongoDB添加用户命令说明

user字段,为新用户的名字。

pwd字段,用户的密码。

cusomData字段,为任意内容,例如可以为用户全名介绍。

roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。

超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。

db是指定数据库的名字,admin是管理数据库。

不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。

MongoDB数据库角色说明

数据库用户角色:read、readWrite。

数据库管理角色:dbAdmin、dbOwner、userAdmin。

集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManage。

备份恢复角色:backup、restore。

所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase。

超级用户角色:root。

内部角色:__system。

MongoDB中的role详解

Read:允许用户读取指定数据库。

readWrite:允许用户读写指定数据库。

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile。

userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户。

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限。

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限。

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限。

首先切换到admin数据库中

# 进入admin数据库

use admin

创建admin超级管理员用户

指定用户的角色和数据库: (注意此时添加的用户都只用于admin数据库,而非你存储业务数据的数据库) (在cmd中敲多行代码时,直接敲回车换行,最后以分号首尾)。


db.createUser(  

  { user: "admin",  

    customData:{description:"superuser"},

    pwd: "admin",  

    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  

  }  

)

创建一个不受访问限制的超级用户

拥有所有权限,不受任何限制。


db.createUser(

    {

        user:"root",

        pwd:"123456",

        roles:[{role:"root",db:"admin"}]

    }

)

创建一个业务数据库管理员用户

只负责某一个或几个数据库的増查改删。


db.createUser({

    user:"user001",

    pwd:"123456",

    customData:{

        name:'jim',

        email:'jim@qq.com',

        age:18,

    },

    roles:[

        {role:"readWrite",db:"db001"},

        {role:"readWrite",db:"db002"},

        'read'// 对其他数据库有只读权限,对db001、db002是读写权限

    ]

})

服务器配置27017的开放端口



Navicat连接mongoDB并创建集合和添加数据

1.连接MongoDB点击这个位置


2、连接参数介绍

Standalone:单机模式,是MongoDB最基本的部署方式。在这种模式下,MongoDB运行在一个单一的服务器上,适合用于开发、测试或者小型应用。由于它不具备高可用性和可扩展性,因此不适用于大型生产环境或需要高可靠性的场景。

Shard Cluster:分片集群,是MongoDB提供的一种用于横向扩展存储和计算能力的分布式部署模式。通过分片,可以将数据集分割成多个部分,并分布到集群中的不同节点上。每个节点存储数据的一个子集,从而提高了数据的访问效率和系统的可扩展性。

Replica Set:副本集,是MongoDB提供的一种高可用性和数据冗余的部署模式。它由一组MongoDB实例组成,这些实例之间通过复制和故障转移来保持数据的一致性和可用性。

一般情况下,我们连接只需要连接主库查数据,所以选择单例连接方式即可,填写好常规参数可以点击测试连接是否正常,即可连接!


3、新建MongoDB数据库(MyMondoDBTest)


4、新建MongoDB文档(Books)并添加数据


上一条:购软平台是MongoDB代理商

下一条:MongoDB是如何玩转MCP的