如何在Mac上恢复mongo Docker容器

我删除了我的蒙哥特容器

docker rm myMongoDB 

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

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

 docker run -p 27017:27017 -d mongo --name myMongo2 

它不会运行,它的状态说Exited (2) 8 seconds ago

Docker Hub上的官方mongo镜像( https://hub.docker.com/_/mongo/ )定义了两个卷,将数据存储在Dockerfile中 。 如果您在运行容器时没有明确指定-v / --volume选项,则Docker会为这些卷创build匿名(未命名)卷,并且这些卷可能还在。 find容器上次使用哪个卷可能有点困难,因为它们没有名称。

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

 docker volume ls 

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

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

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

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

这将在一个新的Ubuntu容器中启动一个交互式shell,并在容器中的/volume-data/安装卷81a40483ae00d72dcfa2117b3ae40f3fe79038544253e60b85a8d0efc8f3d139

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

 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 

我真的build议你在Docker Hub的mongo镜像文档中阅读“ 存储数据的位置”部分,以防止丢失数据。

注意

我还注意到你的最后一个命令在映像名称后面加上--name myMongo2 ; 它应该 mongo 之前 (图像名称)。 另外myMongo2是一个无效的容器名称,因为它不允许有大写字母。