如何在 Mac 上恢复 mongo Docker 容器

How to restore a mongo Docker container on the Mac

我删除了我的 mongo 容器

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/) defines two volumes to store data in the Dockerfile。如果你在 [=60 时没有明确指定 -v / --volume 选项=] 容器,Docker 为它们创建了匿名(未命名)卷,这些卷可能仍然存在。要找到容器最后使用的卷可能有点困难,因为它们没有一个名字。

要列出仍然存在于 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

一旦您确定了哪些卷(根据 Docker 文件,mongo 图像使用两个),您可以启动一个新的 mongo 容器,并安装这些卷;

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

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

注意

我还注意到您的最后一条命令将 --name myMongo2 放在 图像名称之后;它应该是 before mongo(图像名称)。另外 myMongo2 是一个无效的容器名称,因为它不允许有大写字符。