2015-11-26 127 views
2

我最近在windows上創建了一個在boot2docker上運行的mongodb docker實例。Docker掛載卷

不幸的是,在我嘗試使用kitematic時,我設法意外地從mongo容器中刪除了卷,並且無法再訪問我的數據。

mongo實例似乎創建了一個新卷,舊卷現在保持懸空(孤立),並且不會掛載在任何容器中。

有什麼辦法可以恢復嗎?

回答

5

感謝您的答覆是讓我在正確的軌道上,我設法使用下面的命令

docker run -d -v 571284fbe08a3f2b675af299ec14e55550bad623f6316914d465843fa12d6f18:/data/db mongo 

其中571284fbe08a3f2b675af299ec14e55550bad623f6316914d465843fa12d6f18是利用

docker volume ls 
確定懸空量開始一個新的蒙戈容器
3

我通常在這種情況下注冊我創建的任何數據卷容器的路徑(在文件中)。請參閱「Docker volumes for persistent data - is it enough to pass container path only?」和我的腳本updateDataContainerPath

我所看到的是:

這對新數據卷容器足以讓您訪問您的OL d數據。

對於您的情況,由於您未註冊之前數據容器容器的路徑,因此您必須在/mnt/sda1/var/lib/docker/volumes/中搜索已知文件。

2

這個答案可能只是@VonC的重寫,但我覺得有必要總結一下。以下是我遵循的步驟,以便在容器被移除並重新創建後放回已「分離」的卷。

  1. docker volume ls -f 'dangling=true'看到超脫一切的卷
  2. 每個
  3. docker volume inspect <volume_hash>看到他們坐在那裏(在我的情況/var/lib/docker/volumes/
  4. 瀏覽了每個卷的/_data文件夾猜測誰是誰。
  5. 然後如VonC所解釋的那樣,只需將懸掛音量的內容複製到新音量中即可。
  6. (可選)當你確保你回來,你需要,docker volume prune將刪除所有懸掛卷(並因此作出晃來晃去的體積比較容易^^權的潛在未來搜索)
+0

很好的總結了一切。 +1 – VonC