如何在Mac上恢复mongo Docker容器

时间:2016-04-05 03:37:19

标签: macos mongodb docker osx-elcapitan

我删除了我的mongo容器

return (one, two, three)

我丢失了所有数据,还是可以恢复数据?如果是这样,怎么样?

当我尝试从图像中运行另一个容器时

docker rm myMongoDB

它将无法运行且其状态为docker run -p 27017:27017 -d mongo --name myMongo2

1 个答案:

答案 0 :(得分:5)

Docker Hub上的官方mongo图片(https://hub.docker.com/_/mongo/)定义了两个用于存储数据in the Dockerfile的卷。如果在运行容器时没有明确指定-v / --volume选项,则Docker会为这些容器创建匿名(未命名)卷,这些卷可能仍然存在。可能有点难以找到容器最后使用的卷,因为它们没有名称。

要列出泊坞主机上仍然存在的所有卷,请使用;

docker volume ls

哪个应该给你这样的东西;

DRIVER              VOLUME NAME
local               9142c58ad5ac6d6e40ccd84096605f5393bf44ab7b5fe51edfa23cd1f8e13e4b
local               4ac8e34c11ac7955b9b79af10c113b870edd0869889d1005ee17e98e7c6c05f1
local               da0b4a7a00c4b60c492599dabe1dbc501113ae4b2dd1811527384a5dc26cab13
local               81a40483ae00d72dcfa2117b3ae40f3fe79038544253e60b85a8d0efc8f3d139

要查看卷中的内容,您可以将其附加到临时容器中,并检查其中的内容。例如;

docker run -it -v 81a40483ae00d72dcfa2117b3ae40f3fe79038544253e60b85a8d0efc8f3d139:/volume-data ubuntu

这将在新的ubuntu容器中启动交互式shell,其中卷81a40483ae00d72dcfa2117b3ae40f3fe79038544253e60b85a8d0efc8f3d139安装在容器内的/volume-data/

然后,您可以进入该目录,并检查它是否是您正在寻找的音量:

root@08c11a34ed44:/# cd /volume-data/
root@08c11a34ed44:/volume-data# ls -la

一旦确定了哪些卷(根据Dockerfile,mongo映像使用了两个),就可以启动一个新的mongo容器,并挂载这些卷;

docker run -d --name mymongo \
  -v 4ac8e34c11ac7955b9b79af10c113b870edd0869889d1005ee17e98e7c6c05f1:/data/db/ \
  -v  da0b4a7a00c4b60c492599dabe1dbc501113ae4b2dd1811527384a5dc26cab13:/data/configdb/ \
  mongo

我真的建议您阅读Docker Hub上mongo映像文档中的Where to Store Data部分,以防止丢失数据。

注意

我还注意到你的上一个命令将<{1}} 放在图像名称之后;它应该是之前的 --name myMongo2(图像名称)。此外,mongo是一个无效的容器名称,因为不允许使用大写字符。