Docker mount dangling volume

前端 未结 3 1753
北海茫月
北海茫月 2021-01-03 07:23

I recently created a mongodb docker instance running on boot2docker on windows.

Unfortunately during my experimenting with kitematic I managed to accidentally remove

相关标签:
3条回答
  • 2021-01-03 07:41

    I usually register the path (in a file) of any data volume container I create, precisely in that case. See "Docker volumes for persistent data - is it enough to pass container path only?" and my script updateDataContainerPath.

    What I have seen is that:

    • any new data volume container comes with its own Mounts.Source path,
    • you can delete that new folder (which is empty)
    • you can replace it with the folder of your old data volume container (giving it the same name as the new one, but with the content of the old data volume container)

    That will be enough for the new data volume container to give you access to your old data.

    In your case, since you didn't register the path of your previous data volume container, you will have to do a search in /mnt/sda1/var/lib/docker/volumes/ for a known file.

    0 讨论(0)
  • 2021-01-03 07:49

    This answer is probably just a rewrite of @VonC's, but I feel the need to sum things up a bit. Here are the steps I followed in order to put back a volume that got 'detached' after the container had been removed and recreated.

    1. docker volume ls -f 'dangling=true' to see all detached volumes
    2. docker volume inspect <volume_hash> on each to see where they sit (/var/lib/docker/volumes/ in my case)
    3. Look into each volume's /_data folder to guess who's who.
    4. Then as explained by VonC, just copy the content of the dangling volume into the new one.
    5. (optional) when you are sure you've got back everything you need, docker volume prune will remove all dangling volumes (and therefore make a potential future search for the right dangling volume easier ^^)
    0 讨论(0)
  • 2021-01-03 07:57

    Thanks for your reply it got me on the right track, I managed to start a new mongo container using the following command

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

    where 571284fbe08a3f2b675af299ec14e55550bad623f6316914d465843fa12d6f18 is the dangling volume identified by using

    docker volume ls
    
    0 讨论(0)
提交回复
热议问题