如何在 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
是一个无效的容器名称,因为它不允许有大写字符。
我删除了我的 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
是一个无效的容器名称,因为它不允许有大写字符。