我最近在windows上创建了一个运行在boot2docker上的mongodb docker实例。
不幸的是,在我尝试使用kitematic时,我设法意外地从mongo容器中删除了卷,无法再访问我的数据。
mongo实例似乎创建了一个新卷,旧卷现在仍然悬空(孤立)并且没有安装在任何容器中。
有什么方法可以恢复吗?
答案 0 :(得分:7)
感谢您的回复让我走上正轨,我设法使用以下命令启动了一个新的mongo容器
docker run -d -v 571284fbe08a3f2b675af299ec14e55550bad623f6316914d465843fa12d6f18:/data/db mongo
其中 571284fbe08a3f2b675af299ec14e55550bad623f6316914d465843fa12d6f18 是使用
识别的悬空卷docker volume ls
答案 1 :(得分:5)
我通常会注册我创建的任何数据卷容器的路径(在文件中),正是在这种情况下。请参阅“Docker volumes for persistent data - is it enough to pass container path only?”和我的脚本updateDataContainerPath
。
我所看到的是:
Mounts.Source
path,这对于新数据卷容器来说足以让您访问旧数据。
在您的情况下,由于您没有注册先前数据卷容器的路径,因此您必须在/mnt/sda1/var/lib/docker/volumes/
中搜索已知文件。
答案 2 :(得分:5)
这个答案可能只是@VonC的改写,但我觉得有必要总结一下。以下是我在删除容器并重新创建容器后放回“已分离”的卷所遵循的步骤。
docker volume ls -f 'dangling=true'
查看所有已分离的卷docker volume inspect <volume_hash>
看看他们坐在哪里(/var/lib/docker/volumes/
在我的情况下)/_data
文件夹,猜猜谁是谁。docker volume prune
将删除所有悬空卷(因此可能会更有可能在未来搜索正确的悬空卷^^)