docker下载mongodb镜像并启动容器
<p>1、查找mongodb相关镜像</p><div class="cnblogs_code">
<pre>docker search mongo</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/2661519/202306/2661519-20230629112058024-393101937.png"></p>
<p>找到相关的镜像进行拉取,如果不指定版本,默认下载最新的mongoDB。建议自己先查找需要那个版本后在进行拉取,因为mongoDB不同版本之间差距较大。</p>
<p>2、拉取镜像</p>
<p>这里拉取mongodb6.0</p>
<div class="cnblogs_code">
<pre>docker pull mongodb:6.0</pre>
</div>
<p>拉取成功后,查看docker镜像</p>
<div class="cnblogs_code">
<pre>docker images</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/2661519/202306/2661519-20230629113303035-1447155680.png"></p>
<p>3、本地创建容器卷文件夹</p>
<p>首先在本地创建文件夹</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">D:\mongodb\conf
D:\mongodb\data
D:\mongodb\logs</span></pre>
</div>
<p>进入conf文件夹创建mongod.conf文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 数据库文件存储位置
dbpath = /data/db
# log文件存储位置
logpath = /data/log/mongod.log<br>#pid运行目录<br>#pidfilepath = /var/run/mongodb/mongodb.pid
# 使用追加的方式写日志
logappend = true<br>#启用日志文件,默认启用<br></span>journal<span class="hljs-operator">=<span class="hljs-keyword">true</span></span></pre>
<pre><span style="color: rgba(0, 0, 0, 1)">#最大连接数<br>maxConns=2048
# 是否以守护进程方式运行
# fork = true
# 全部ip可以访问
bind_ip = 0.0.0.0
# 端口号
port = 27017
# 是否启用认证
auth = true
# 设置oplog的大小(MB)
oplogSize=</span>1755</pre>
<pre></pre>
</div>
<p>进入logs目录文件创建mongod.log文件</p>
<p>4、通过命令创建新容器</p>
<div class="cnblogs_code">
<pre>docker run -d --name mongodb -p 27017:27017 --privileged=true --restart=always <br>-v D:/mongodb/data:/data/db <br>-v D:/mongodb/conf:/data/configdb <br>-v D:/mongodb/logs:/data/log/ <br>-e MONGO_INITDB_ROOT_USERNAME=root <br>-eMONGO_INITDB_ROOT_PASSWORD=1234qwer mongo:6.0<br>-f /data/configdb/mongod.conf --auth</pre>
</div>
<p>-d 后台运行</p>
<p>-p 映射端口</p>
<p>--privileged 以root 用户身份在容器内运行</p>
<p>--restart 自动重启容器</p>
<p>-v 容器卷</p>
<p>-e 设置环境</p>
<p>-f 指明配置文件路径 容器以容器内的配置文件启动</p>
<p>--auth mongo开启安全认证,需要账号密码才能访问</p>
<p> <img src="https://img2023.cnblogs.com/blog/2661519/202306/2661519-20230629133154374-285099969.jpg"></p>
<p>容器启动成功</p>
<p>5、查看mongo版本</p>
<p>进入容器实例</p>
<div class="cnblogs_code">
<pre>docker exec -it cfb571a9a7e4/bin/bash</pre>
</div>
<p>输入命令:</p>
<div class="cnblogs_code">
<pre>mongod -version</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/2661519/202306/2661519-20230629133401386-1542222445.png"></p>
<p>docker安装mongodb成功。</p>
<p>6、错误问题</p>
<p>上面我们使用docker安装的mongodb已经可以使用了,但是还有一个问题。如果重新启动容器,会发现容器启动不了。会报错:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{"t":{"$date":"2023-06-29T09:25:48.932+00:00"},"s":"I","c":"CONTROL","id":20698, "ctx":"-","msg":"***** SERVER RESTARTED *****"}
{"t":{"$date":"2023-06-29T09:25:48.933+00:00"},"s":"I","c":"NETWORK","id":4915701, "ctx":"-","msg":"Initialized wire specification","attr":{"spec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":17},"incomingInternalClient":{"minWireVersion":0,"maxWireVersion":17},"outgoing":{"minWireVersion":6,"maxWireVersion":17},"isInternalClient":true}}}
{"t":{"$date":"2023-06-29T09:25:48.935+00:00"},"s":"I","c":"CONTROL","id":23285, "ctx":"-","msg":"Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'"}
{"t":{"$date":"2023-06-29T09:25:48.935+00:00"},"s":"I","c":"NETWORK","id":4648601, "ctx":"main","msg":"Implicit TCP FastOpen unavailable. If TCP FastOpen is required, set tcpFastOpenServer, tcpFastOpenClient, and tcpFastOpenQueueSize."}
{"t":{"$date":"2023-06-29T09:25:48.937+00:00"},"s":"I","c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"TenantMigrationDonorService","namespace":"config.tenantMigrationDonors"}}
{"t":{"$date":"2023-06-29T09:25:48.937+00:00"},"s":"I","c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"TenantMigrationRecipientService","namespace":"config.tenantMigrationRecipients"}}
{"t":{"$date":"2023-06-29T09:25:48.937+00:00"},"s":"I","c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"ShardSplitDonorService","namespace":"config.tenantSplitDonors"}}
{"t":{"$date":"2023-06-29T09:25:48.937+00:00"},"s":"I","c":"CONTROL","id":5945603, "ctx":"main","msg":"Multi threading initialized"}
{"t":{"$date":"2023-06-29T09:25:48.938+00:00"},"s":"I","c":"CONTROL","id":4615611, "ctx":"initandlisten","msg":"MongoDB starting","attr":{"pid":1,"port":27017,"dbPath":"/data/db","architecture":"64-bit","host":"cfb571a9a7e4"}}
{"t":{"$date":"2023-06-29T09:25:48.939+00:00"},"s":"I","c":"CONTROL","id":23403, "ctx":"initandlisten","msg":"Build Info","attr":{"buildInfo":{"version":"6.0.6","gitVersion":"26b4851a412cc8b9b4a18cdb6cd0f9f642e06aa7","openSSLVersion":"OpenSSL 3.0.2 15 Mar 2022","modules":[],"allocator":"tcmalloc","environment":{"distmod":"ubuntu2204","distarch":"x86_64","target_arch":"x86_64"}}}}
{"t":{"$date":"2023-06-29T09:25:48.939+00:00"},"s":"I","c":"CONTROL","id":51765, "ctx":"initandlisten","msg":"Operating System","attr":{"os":{"name":"Ubuntu","version":"22.04"}}}
{"t":{"$date":"2023-06-29T09:25:48.939+00:00"},"s":"I","c":"CONTROL","id":21951, "ctx":"initandlisten","msg":"Options set by command line","attr":{"options":{"config":"/data/configdb/mongod.conf","net":{"bindIp":"*","port":27017},"replication":{"oplogSizeMB":2048},"security":{"authorization":"enabled"},"storage":{"dbPath":"/data/db"},"systemLog":{"destination":"file","logAppend":true,"path":"/data/log/mongod.log"}}}}
{"t":{"$date":"2023-06-29T09:25:48.940+00:00"},"s":"E","c":"NETWORK","id":23024, "ctx":"initandlisten","msg":"Failed to unlink socket file","attr":{"path":"/tmp/mongodb-27017.sock","error":"Operation not permitted"}}
{"t":{"$date":"2023-06-29T09:25:48.941+00:00"},"s":"F","c":"ASSERT", "id":23091, "ctx":"initandlisten","msg":"Fatal assertion","attr":{"msgid":40486,"file":"src/mongo/transport/transport_layer_asio.cpp","line":1126}}
{"t":{"$date":"2023-06-29T09:25:48.941+00:00"},"s":"F","c":"ASSERT", "id":23092, "ctx":"initandlisten","msg":"\n\n***aborting after fassert() failure\n\n"}</span></pre>
</div>
<p>主要看这条日志:</p>
<div class="cnblogs_code">
<pre>":"E","c":"NETWORK","id":23024, "ctx":"initandlisten","msg":"Failed to unlink socket file","attr":{"path":"/tmp/mongodb-27017.sock","error":"Operation not permitted"}}</pre>
</div>
<p>发现 /tmp/mongodb-27017.sock 没有操作权限,导致容器重新启动失败。</p>
<p>解决方法:</p>
<p>删除mongodb-27017.sock,重启mongo服务。</p>
<div class="cnblogs_code">
<pre>sudo rm /tmp/mongodb-27017.sock</pre>
</div>
<p>因为使用的docker,容器没有运行进入不了容器,所以无法使用。</p>
<p>所以需要使用容器卷映射tmp 使mongodb-27017文件拥有相应权限</p>
<p>增加容器卷:</p>
<div class="cnblogs_code">
<pre> -v D:/mongodb/tmp:/tmp</pre>
</div>
<p>把之前的容器删除,重新启动一个新容器。由于之前使用了容器卷,所以启动新容器数据也不会消失。完整命令:</p>
<div class="cnblogs_code">
<pre>docker run -d --name mongodb -p 27017:27017 --privileged=true <br>-v D:/mongodb/data:/data/db <br>-v D:/mongodb/conf:/data/configdb <br>-v D:/mongodb/logs:/data/log/<br>-v D:/mongodb/tmp:/tmp <br>-e MONGO_INITDB_ROOT_USERNAME=root<br>-eMONGO_INITDB_ROOT_PASSWORD=1234qwer <br>mongo:6.0 <br>-f /data/configdb/mongod.conf --auth</pre>
</div>
<p>启动容器。然后停止容器再次重新启动。发现没有报错问题解决。</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/sowler/p/17513973.html
頁:
[1]