Docker安装MongoDB并使用Navicat连接
<h2>MongoDB简介:</h2><p> MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。</p>
<h2><span class="ne-text">查看可用的</span>MongoDB<span class="ne-text">版本:</span></h2>
<blockquote>
<p id="ue0c55910" class="ne-p"><span class="ne-text">访问DokcerHub中的MongoDB镜像库地址:https://hub.docker.com/_/mongo/tags</span></p>
<p id="u4c85144b" class="ne-p"><span class="ne-text">可以通过 Sort by 查看其他版本的MongoDB,查看最新版本MongoDB镜像(mongo:latest<code class="ne-code"><span class="ne-text">):https://hub.docker.com/_/mongo/tags?page=1&name=latest<br></span></code></span></p>
</blockquote>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202209/1336199-20220918181523098-804240778.png" alt="" loading="lazy"></p>
<blockquote>
<p> 此外,我们还可以用<code class="ne-code"><span class="ne-text">docker search mongo</span></code><span class="ne-text">命令来查看可用版本: </span></p>
</blockquote>
<p><span class="ne-text"><img src="https://img2022.cnblogs.com/blog/1336199/202209/1336199-20220918181652213-1731399645.png" alt="" loading="lazy"></span></p>
<h2>拉取最新版本的MongoDB镜像:</h2>
<div class="cnblogs_code">
<pre>docker pull mongo:latest</pre>
</div>
<blockquote>
<p>注意:tag是可选的,tag表示标签,多为软件的版本,默认是latest版本(最新版)</p>
</blockquote>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202209/1336199-20220918181850432-728077476.png" alt="" loading="lazy"></p>
<h2>验证MongoDB镜像是否成功拉取到本地:</h2>
<p><span class="ne-text">使用以下命令来查看MongoDB镜像是否成功拉取到本地:</span></p>
<div class="cnblogs_code">
<pre>docker images</pre>
</div>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202209/1336199-20220918182042934-439954334.png" alt="" loading="lazy"></p>
<h2><span class="ne-text">创建并运行一个</span>MongoDB<span class="ne-text">容器:</span></h2>
<div class="cnblogs_code">
<pre>docker run -itd --name mongo-test -p 27017:27017 mongo --auth</pre>
</div>
<p><strong>参数说明:</strong></p>
<ul>
<li><strong>-itd:</strong>其中,i是交互式操作,t是一个终端,d指的是在后台运行。</li>
<li><strong>--name mongo-test:</strong>容器名称</li>
<li><strong>-p 27017:27017</strong> :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。</li>
<li><strong>--auth</strong>:需要密码才能访问容器服务(<span style="color: rgba(255, 0, 0, 1)">注意:安全问题,MongoDB默认是不开启权限验证的,不过设置了这里就相当于修改MongoDB的配置auth=ture启用权限访问</span>)。</li>
</ul>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202209/1336199-20220918182931175-1708576518.png" alt="" loading="lazy"></p>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202209/1336199-20220918183139655-1291710365.png" alt="" loading="lazy"></p>
<h2>解决无法正常执行mongo命令问题</h2>
<p><strong>进入容器:</strong></p>
<div class="cnblogs_code">
<pre>docker exec -it mongo-test mongo</pre>
</div>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202210/1336199-20221016123434663-1228746207.png" alt="" loading="lazy"></p>
<p><strong> 异常原因:</strong></p>
<blockquote>
<p>OCI runtime exec failed: exec failed: unable to start container process: exec: "mongo": executable file not found in $PATH: unknown</p>
</blockquote>
<p><strong>官网解决方案:</strong></p>
<p>https://github.com/docker-library/mongo/issues/558</p>
<blockquote>
<p>mongo5.0以上的版本使用mongo来执行mongodb命令已经不支持了,你需要改用mongosh来替代mongo!</p>
</blockquote>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202210/1336199-20221016124300723-1375377094.png" alt="" loading="lazy"></p>
<h2>进入创建的MongoDB容器</h2>
<div class="cnblogs_code">
<pre>docker exec -it mongo-test mongosh</pre>
</div>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202210/1336199-20221016143002826-1096026196.png" alt="" loading="lazy"></p>
<h2>MongoDB报错"ongoServerError: not authorized on admin to execute command":</h2>
<p>MongoDB默认是不需要用户密码就可以连接的,如果使用命令报错"ongoServerError: not authorized on admin to execute command ",则表示当前登陆用户不具备相应权限。</p>
<p><img src="https://img2023.cnblogs.com/blog/1336199/202212/1336199-20221210165612041-1936739153.png" alt="" loading="lazy"></p>
<p>解决办法:在admin数据库中通过创建一个用户,赋予用户root权限。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 进入admin数据库
use admin<br>
# 创建一个超级用户
db.createUser(
{
user:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
pwd:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
roles:[{role:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">"</span>,db:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">}]
}
);<br><br>#授权登录<br>db.auth('root','123456')<br></span></pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/1336199/202212/1336199-20221210170429247-735605144.png" alt="" loading="lazy"></p>
<h2>MongoDB用户权限管理:</h2>
<h3>MongoDB添加用户命令说明</h3>
<ul>
<li>user字段,为新用户的名字。</li>
<li>pwd字段,用户的密码。</li>
<li>cusomData字段,为任意内容,例如可以为用户全名介绍。</li>
<li>roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。</li>
<li>超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。</li>
<li>db是指定数据库的名字,admin是管理数据库。</li>
<li>不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。</li>
</ul>
<h3>首先切换到admin数据库中</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 进入admin数据库
use admin</span></pre>
</div>
<h3 id="item-0-3">创建admin超级管理员用户</h3>
<blockquote>
<p>指定用户的角色和数据库:<br>(注意此时添加的用户都只用于admin数据库,而非你存储业务数据的数据库)<br>(在cmd中敲多行代码时,直接敲回车换行,最后以分号首尾)</p>
</blockquote>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.createUser(
{ user: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
customData:{description:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">superuser</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">},
pwd: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
roles: [ { role: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">userAdminAnyDatabase</span><span style="color: rgba(128, 0, 0, 1)">"</span>, db: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } ]
}
) </span></pre>
</div>
<h3 id="item-0-4">创建一个不受访问限制的超级用户</h3>
<blockquote>
<p>拥有所有权限,不受任何限制</p>
</blockquote>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.createUser(
{
user:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
pwd:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
roles:[{role:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">"</span>,db:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">}]
}
);</span></pre>
</div>
<h3 id="item-0-5">创建一个业务数据库管理员用户</h3>
<blockquote>
<p>只负责某一个或几个数据库的増查改删</p>
</blockquote>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.createUser({
user:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user001</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
pwd:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
customData:{
name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jim</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
email:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jim@qq.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
age:</span><span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">,
},
roles:[
{role:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">readWrite</span><span style="color: rgba(128, 0, 0, 1)">"</span>,db:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">db001</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">},
{role:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">readWrite</span><span style="color: rgba(128, 0, 0, 1)">"</span>,db:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">db002</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">read</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对其他数据库有只读权限,对db001、db002是读写权限</span>
<span style="color: rgba(0, 0, 0, 1)"> ]
})</span></pre>
</div>
<h3>MongoDB数据库角色说明</h3>
<ul>
<li>数据库用户角色:read、readWrite;</li>
<li>数据库管理角色:dbAdmin、dbOwner、userAdmin;</li>
<li>集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;</li>
<li>备份恢复角色:backup、restore;</li>
<li>所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase</li>
<li>超级用户角色:root</li>
<li>内部角色:__system</li>
</ul>
<h3>MongoDB中的role详解</h3>
<ul>
<li>Read:允许用户读取指定数据库</li>
<li>readWrite:允许用户读写指定数据库</li>
<li>dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile</li>
<li>userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户</li>
<li>clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限</li>
<li>readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限</li>
<li>readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限</li>
<li>userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限</li>
<li>dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限</li>
<li>root:只在admin数据库中可用。超级账号,超级权限</li>
</ul>
<h2>服务器配置27017的开放端口:</h2>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202210/1336199-20221016144754179-853573000.png" alt="" loading="lazy"></p>
<h2><span class="content">Navicat连接mongoDB:</span></h2>
<h3><strong>1.连接MongoDB点击这个位置</strong></h3>
<p><span class="content"><img src="https://img2022.cnblogs.com/blog/1336199/202210/1336199-20221016151048793-1143153623.png" alt="" loading="lazy"></span></p>
<h3>2、连接参数介绍:</h3>
<p><strong>stand alone:独立的</strong></p>
<p><strong>shard cluster:分片集群</strong></p>
<p><strong>replica set:复制集</strong></p>
<p><strong>SRV record:</strong></p>
<p>SRV记录是DNS服务器的数据库中支持的一种资源记录的类型,它记录了哪台计算机提供了哪个服务这么一个简单的信息。</p>
<p>SRV 记录:一般是为Microsoft的活动目录设置时的应用。DNS可以独立于活动目录,但是活动目录必须有DNS的帮助才能工作。</p>
<p>为了活动目录能够正常的工作,DNS服务器必须支持服务定位(SRV)资源记录,资源记录把服务名字映射为提供服务的服务器名字。</p>
<p>活动目录客户和域控制器使用SRV资源记录决定域控制器的IP地址。</p>
<p>一般情况下,我们连接只需要连接主库查数据,所以选择独立的这个连接方式就可以,填写好常规参数可以点击测试连接是否正常,即可连接!</p>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202210/1336199-20221016151637458-97446919.png" alt="" loading="lazy"></p>
<p><img src="https://img2022.cnblogs.com/blog/1336199/202210/1336199-20221016181139072-1562356833.png" alt="" loading="lazy"></p>
<h2>参考文章:</h2>
<p>https://blog.csdn.net/zhanghongshuang/article/details/117461225</p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<blockquote >
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者名称:</span>追逐时光者</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者简介:</span>一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/16653882.html
頁:
[1]