【问题标题】:Docker mount dangling volumeDocker 挂载悬空卷
【发布时间】:2016-02-29 00:33:15
【问题描述】:

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

不幸的是,在我对 kitematic 的试验过程中,我意外地从 mongo 容器中删除了卷,并且无法再访问我的数据。

mongo 实例似乎已经创建了一个新卷,而旧卷现在仍然悬空(孤立)并且没有安装在任何容器中。

有什么办法可以恢复吗?

【问题讨论】:

    标签: docker


    【解决方案1】:

    这个答案可能只是对@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 将删除所有悬空卷(从而使未来可能更容易搜索合适的悬空卷^^)

    【讨论】:

    • 不错的总结。 +1
    【解决方案2】:

    我通常会注册我创建的任何数据卷容器的路径(在文件中),正是在这种情况下。请参阅“Docker volumes for persistent data - is it enough to pass container path only?”和我的脚本updateDataContainerPath

    我看到的是:

    这足以让新数据卷容器让您访问旧数据。

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

    【讨论】:

      【解决方案3】:

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

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

      其中571284fbe08a3f2b675af299ec14e55550bad623f6316914d465843fa12d6f18是使用

      识别的悬空体积
      docker volume ls
      

      【讨论】:

        猜你喜欢
        • 2020-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 2020-06-05
        • 2019-07-29
        相关资源
        最近更新 更多