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