1、查找mongodb相關鏡像 docker search mongo 找到相關的鏡像進行拉取,如果不指定版本,預設下載最新的mongoDB。建議自己先查找需要那個版本後在進行拉取,因為mongoDB不同版本之間差距較大。 2、拉取鏡像 這裡拉取mongodb6.0 docker pull mong ...
1、查找mongodb相關鏡像
docker search mongo
找到相關的鏡像進行拉取,如果不指定版本,預設下載最新的mongoDB。建議自己先查找需要那個版本後在進行拉取,因為mongoDB不同版本之間差距較大。
2、拉取鏡像
這裡拉取mongodb6.0
docker pull mongodb:6.0
拉取成功後,查看docker鏡像
docker images
3、本地創建容器捲文件夾
首先在本地創建文件夾
D:\mongodb\conf
D:\mongodb\data
D:\mongodb\logs
進入conf文件夾創建mongod.conf文件
# 資料庫文件存儲位置
dbpath = /data/db
# log文件存儲位置
logpath = /data/log/mongod.log
#pid運行目錄
#pidfilepath = /var/run/mongodb/mongodb.pid
# 使用追加的方式寫日誌
logappend = true
#啟用日誌文件,預設啟用
journal=true
#最大連接數
maxConns=2048
# 是否以守護進程方式運行
# fork = true
# 全部ip可以訪問
bind_ip = 0.0.0.0
# 埠號
port = 27017
# 是否啟用認證
auth = true
# 設置oplog的大小(MB)
oplogSize=1755
進入logs目錄文件創建mongod.log文件
4、通過命令創建新容器
docker run -d --name mongodb -p 27017:27017 --privileged=true --restart=always
-v D:/mongodb/data:/data/db
-v D:/mongodb/conf:/data/configdb
-v D:/mongodb/logs:/data/log/
-e MONGO_INITDB_ROOT_USERNAME=root
-e MONGO_INITDB_ROOT_PASSWORD=1234qwer mongo:6.0
-f /data/configdb/mongod.conf --auth
-d 後臺運行
-p 映射埠
--privileged 以root 用戶身份在容器內運行
--restart 自動重啟容器
-v 容器捲
-e 設置環境
-f 指明配置文件路徑 容器以容器內的配置文件啟動
--auth mongo開啟安全認證,需要賬號密碼才能訪問
容器啟動成功
5、查看mongo版本
進入容器實例
docker exec -it cfb571a9a7e4 /bin/bash
輸入命令:
mongod -version
docker安裝mongodb成功。
6、錯誤問題
上面我們使用docker安裝的mongodb已經可以使用了,但是還有一個問題。如果重新啟動容器,會發現容器啟動不了。會報錯:
{"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"}
主要看這條日誌:
":"E", "c":"NETWORK", "id":23024, "ctx":"initandlisten","msg":"Failed to unlink socket file","attr":{"path":"/tmp/mongodb-27017.sock","error":"Operation not permitted"}}
發現 /tmp/mongodb-27017.sock 沒有操作許可權,導致容器重新啟動失敗。
解決方法:
刪除mongodb-27017.sock,重啟mongo服務。
sudo rm /tmp/mongodb-27017.sock
因為使用的docker,容器沒有運行進入不了容器,所以無法使用。
所以需要使用容器捲映射tmp 使mongodb-27017文件擁有相應許可權
增加容器捲:
-v D:/mongodb/tmp:/tmp
把之前的容器刪除,重新啟動一個新容器。由於之前使用了容器捲,所以啟動新容器數據也不會消失。完整命令:
docker run -d --name mongodb -p 27017:27017 --privileged=true
-v D:/mongodb/data:/data/db
-v D:/mongodb/conf:/data/configdb
-v D:/mongodb/logs:/data/log/
-v D:/mongodb/tmp:/tmp
-e MONGO_INITDB_ROOT_USERNAME=root
-e MONGO_INITDB_ROOT_PASSWORD=1234qwer
mongo:6.0
-f /data/configdb/mongod.conf --auth
啟動容器。然後停止容器再次重新啟動。發現沒有報錯問題解決。