rpi-mongodb3 容器無法重啟解決方案
概述
在上一篇文章中,我們嘗試使用 rpi-mongodb3 來執行 docker mongodb。然而,在實際使用中,系統重啟、關機或者將 mongodb 容器停止後,容器就不能再次被啟動,本文將嘗試找到其原因以及解決方案。
關鍵詞 rpi-mongodb3
mongo.lock
問題描述
首先,我已經建立好一個 rpi-mongodb3 的容器,我們先檢視容器的情況:
docker container ls>>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1514a9534be andresvidal/rpi3-mongodb3 "/docker-entrypoint.…" 2 hours ago Up 4 seconds 0.0.0.0:27017->27017/tcp, 28017/tcp mongodb_home
接下來,我們使用 docker stop
來將容器停止:
docker stop mongodb_home
我們再檢視一下現在容器的狀態:
docker container ls -a>>c1514a9534be andresvidal/rpi3-mongodb3 "/docker-entrypoint.…" 2 hours ago Exited (137) 2 minutes ago mongodb_home
接下來,我們嘗試重新啟動容器:
docker start mongodb_home docker container ls -a>>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1514a9534be andresvidal/rpi3-mongodb3 "/docker-entrypoint.…" 2 hours ago Exited (100) 3 seconds ago mongodb_home
我們可以看到,這裡容器並沒有正常被啟動,我們使用 docker log
來檢視一下日誌:
docker logs -f mongodb_home --tail 10 --timestamps>>2018-05-03T11:15:08.601093125Z 2018-05-03T11:15:08.601+0000 I CONTROL [initandlisten] build info: Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l BOOST_LIB_VERSION=1_49 2018-05-03T11:15:08.601208904Z 2018-05-03T11:15:08.601+0000 I CONTROL [initandlisten] allocator: system 2018-05-03T11:15:08.601368694Z 2018-05-03T11:15:08.601+0000 I CONTROL [initandlisten] options: { net: { http: { RESTInterfaceEnabled: true, enabled: true } }, security: { authorization: "enabled" } } 2018-05-03T11:15:08.625743003Z 2018-05-03T11:15:08.625+0000 W - [initandlisten] Detected unclean shutdown - /data/db/mongod.lock is not empty. 2018-05-03T11:15:08.656666026Z 2018-05-03T11:15:08.656+0000 I STORAGE [initandlisten] ************** 2018-05-03T11:15:08.656785816Z Unclean shutdown detected. 2018-05-03T11:15:08.656833159Z Please visit for recovery instructions. 2018-05-03T11:15:08.656869096Z ************* 2018-05-03T11:15:08.662197879Z 2018-05-03T11:15:08.661+0000 I STORAGE [initandlisten] exception in initAndListen: 12596 old lock file, terminating 2018-05-03T11:15:08.662328867Z 2018-05-03T11:15:08.662+0000 I CONTROL [initandlisten] dbexit: rc: 100
可以看到日誌,不能重新啟動容器的原因是因為 mongo 非正常關閉,生成了 mongo.lock 檔案。我們根據這個線索,來尋找解決方案。
解決方案一 —— 刪除 mongo.lock
最為簡單粗暴的方法是直接刪除 mongo.lock 檔案,我的 mongodb 容器掛載了資料卷在 /home/pi/db/mongo
之下,我們先刪除 mongo.lock 檔案,再嘗試重啟容器看看是否能成功。
sudo rm -rf /home/pi/db/mongo/mongod.lock docker start mongodb_home docker container ls >>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1514a9534be andresvidal/rpi3-mongodb3 "/docker-entrypoint.…" 3 hours ago Up 14 seconds 0.0.0.0:27017->27017/tcp, 28017/tcp mongodb_home
我們可以看到,我們的 mongodb 容器又能正常啟動了。
解決方案二 —— 使用 kill 替代 stop 停止容器
在 rpi-mongodb3 的 Github 頁面,有提到可以使用 kill 來停止容器,我們也嘗試以下使用 kill 命令替代 stop 是否能正常停止和重啟:
docker kill --signal=SIGINT mongodb_home docker container ls -a>>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1514a9534be andresvidal/rpi3-mongodb3 "/docker-entrypoint.…" 3 hours ago Exited (0) 4 seconds ago docker start mongodb_home>>docker start mongodb_home docker container ls>>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1514a9534be andresvidal/rpi3-mongodb3 "/docker-entrypoint.…" 3 hours ago Up 6 seconds 0.0.0.0:27017->27017/tcp, 28017/tcp mongodb_home
這裡我們可以看到,使用 kill 替代 stop 停止容器,容器停止後,容器的狀態是 Exited (0)
而使用 stop 停止容器,容器的狀態是 Exted(100)
,可以猜測可能是因為 stop 命令使 mongo 容器無法正常停止,從而生成了 mongo.lock 檔案,讓容器的資料庫鎖死保護。
X86平臺的 mongo 官網 docker 映象
為探求這一問題是否 mongo 的 Docker 容器的 Bug,我嘗試在 X86 平臺上嘗試,但並沒有發現類似的問題,可能是由於這個 rpi-mongodb 容器的問題,由於在樹莓派上使用 mongodb docker 映象容器的並不多,到目前為止除了以上兩個解決方案之外並沒有找到更好的解決辦法。因此就只能到這裡為止,日後有更新或者有解決方案,再補充一篇文章再作說明。
作者:speculatecat
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1747/viewspace-2805911/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 無法開啟控制檯的解決方案
- docker容器故障致無法啟動解決例項Docker
- WinXP啟動無法顯示桌面,無法啟動IE,無法關機的解決方案
- oracle 9iAgent無法啟動解決方案Oracle
- docker容器故障致無法啟動解決例項薦Docker
- VMware USB Arbitration Service 無法啟動的解決方案
- Ubuntu 重啟無法進入圖形介面的解決辦法Ubuntu
- 記一次mysql無法啟動的解決方案MySql
- Linux 新增新硬碟無法識別[無需重啟]的解決方法Linux硬碟
- Windows防火牆無法開啟的解決方案--不看後悔Windows防火牆
- ics無法啟動的解決
- windows10瀏覽器老是無法正常開啟解決方案Windows瀏覽器
- 域名被反詐中心攔截無法開啟的解決方案
- win10藍屏無限重啟無法進入安全模式怎麼解決Win10模式
- 解決ASM無法啟動問題ASM
- autodesk產品無法安裝解決方案
- win10老是藍屏重啟怎麼解決_windows10藍屏重啟解決方案Win10Windows
- 登錄檔無法開啟的解決辦法
- 記vscode無法啟動解決辦法VSCode
- tomcat無法啟動的解決方法Tomcat
- 解決Win8系統下隨身碟無法開啟的方案
- 微信中無法下載app的解決方案APP
- kali無法執行cobaltstrike3.6解決方案
- DSOframer 無法正常載入的解決方案
- Windows10系統無限重啟無法開機如何解決Windows
- win10藍色畫面無限重啟無法進入安全模式怎麼解決Win10模式
- Asp.net 無法啟動IIS Express 解決辦法ASP.NETExpress
- [php]wmap應用程式無法啟動解決辦法PHP
- win10安裝office要求重啟後無限重啟的解決教程Win10
- Vue修改代理無需重啟專案解決方式Vue
- centOS修改主機名,重啟後無效解決CentOS
- 解決GITLAB無法啟動runsv no runningGitlab
- linux mysql無法啟動怎麼解決?LinuxMySql
- Apache無法啟動解決 the requested operation has failedApacheAI
- 解決Zblog文章無法開啟網站網站
- 【案例】利用innodb_force_recovery解決MySQL伺服器crash無法重啟問題MySql伺服器
- 【案例】利用innodb_force_recovery 解決MySQL伺服器crash無法重啟問題MySql伺服器
- 頁面無法輸入多個空格解決方案