Docker挂机悬挂音量

dyl*_*ton 4 docker

我最近创建了一个在windows上的boot2docker上运行的mongodb docker实例.

不幸的是,在我尝试使用kitematic时,我设法意外地从mongo容器中删除了卷,无法再访问我的数据.

蒙戈实例似乎已经创造了旧卷,现在剩下的晃来晃去(孤儿),而不是安装在任何容器新卷.

有没有办法恢复这个?

dyl*_*ton 7

感谢您的回复,它让我走上正轨,我设法使用以下命令启动一个新的mongo容器

docker run -d -v 571284fbe08a3f2b675af299ec14e55550bad623f6316914d465843fa12d6f18:/data/db mongo
Run Code Online (Sandbox Code Playgroud)

其中571284fbe08a3f2b675af299ec14e55550bad623f6316914d465843fa12d6f18是使用标识的悬空体积

docker volume ls
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 5

在这种情况下,我通常会注册我创建的任何数据卷容器的路径(在文件中)。请参阅“ 用于持久数据的Docker卷-仅通过容器路径就足够了吗? ”和我的脚本updateDataContainerPath

我所看到的是:

对于新的数据量容器,这足以使您访问旧数据。

在您的情况下,由于您没有注册先前数据卷容器的路径,因此您将不得不搜索/mnt/sda1/var/lib/docker/volumes/已知文件。


Arn*_*d P 5

这个答案可能只是对@VonC的重写,但是我觉得有必要总结一下。这是我要执行的步骤,以恢复在删除并重新创建容器后已“分离”的卷。

  1. docker volume ls -f 'dangling=true' 查看所有分离的卷
  2. docker volume inspect <volume_hash>在每一个上看他们坐在哪里(/var/lib/docker/volumes/就我而言)
  3. 查看每个卷的/_data文件夹以猜测谁是谁。
  4. 然后,如VonC所述,只需将悬空卷的内容复制到新卷中即可。
  5. (可选)当您确定已收回所有需要的东西时,docker volume prune将删除所有悬空的体积(因此将来可能会更容易地搜索正确的悬空体积^^)