Macos 如何在Mac上恢复mongo Docker容器

Macos 如何在Mac上恢复mongo Docker容器,macos,mongodb,docker,osx-elcapitan,Macos,Mongodb,Docker,Osx Elcapitan,我取下了我的mongo容器 docker rm myMongoDB 我是否丢失了所有数据,或者我可以恢复它?如果是,怎么做 当我尝试从映像运行另一个容器时 docker run -p 27017:27017 -d mongo --name myMongo2 它将不会运行,其状态显示已在8秒前退出(2) Docker Hub()上的官方mongo图像定义了两个卷来存储数据。如果在运行容器时未明确指定-v/--volume选项,Docker会为这些卷创建匿名(未命名)卷,并且这些卷可能仍然存在。

我取下了我的mongo容器

docker rm myMongoDB
我是否丢失了所有数据,或者我可以恢复它?如果是,怎么做

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

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

它将不会运行,其状态显示
已在8秒前退出(2)

Docker Hub()上的官方
mongo
图像定义了两个卷来存储数据。如果在运行容器时未明确指定
-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
一旦确定了哪些卷(根据Dockerfile,mongo映像使用两个卷),就可以启动新的mongo容器并装载这些卷

docker run -d --name mymongo \
  -v 4ac8e34c11ac7955b9b79af10c113b870edd0869889d1005ee17e98e7c6c05f1:/data/db/ \
  -v  da0b4a7a00c4b60c492599dabe1dbc501113ae4b2dd1811527384a5dc26cab13:/data/configdb/ \
  mongo
我真的建议您阅读文档中Docker Hub上的mongo映像部分,以防止丢失数据

注意


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

Docker Hub()上的官方
mongo
图像定义了两个卷来存储数据。如果在运行容器时未明确指定
-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
一旦确定了哪些卷(根据Dockerfile,mongo映像使用两个卷),就可以启动新的mongo容器并装载这些卷

docker run -d --name mymongo \
  -v 4ac8e34c11ac7955b9b79af10c113b870edd0869889d1005ee17e98e7c6c05f1:/data/db/ \
  -v  da0b4a7a00c4b60c492599dabe1dbc501113ae4b2dd1811527384a5dc26cab13:/data/configdb/ \
  mongo
我真的建议您阅读文档中Docker Hub上的mongo映像部分,以防止丢失数据

注意


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

如果您的容器使用
volume
,则您的计算机上可能仍然可以使用数据。看见在做任何事情之前备份文件夹,以防出错。@warmoverflow我看到了stackoverflow条目,但我没有
/var/lib/docker
目录。不确定是因为我上次使用mongodb后升级到El Capitan,还是因为它是Mac而不是Linux。@thaJeztah提供了一个很好的答案。此外,由于您使用的是MacOSX,所以您使用的是Docker工具箱。
/var/lib/docker
文件夹位于docker toolbox vm内,您可以使用
docker machine ssh default
登录该虚拟机。如果您的容器使用
,则数据可能仍在您的机器上可用。看见在做任何事情之前备份文件夹,以防出错。@warmoverflow我看到了stackoverflow条目,但我没有
/var/lib/docker
目录。不确定是因为我上次使用mongodb后升级到El Capitan,还是因为它是Mac而不是Linux。@thaJeztah提供了一个很好的答案。此外,由于您使用的是MacOSX,所以您使用的是Docker工具箱。
/var/lib/docker
文件夹位于docker toolbox vm中,您可以使用
docker machine ssh default
登录该虚拟机。显然,“数据存储位置”部分对OS X有一个警告,它表示不可能在数据目录映射到主机的情况下运行MongoDB容器。很高兴知道!无论如何,我的数据现在应该在
/data/..
目录中。但是,我没有
/data/
目录。这可能是因为最近我将OS X升级到El Capitan时,它被彻底摧毁了??而且,我的docker上没有
docker volume ls
命令
docker:“volume”不是docker命令。
我使用docker 1.8.1,以防
volume
是新命令。看起来您运行的是旧版本的docker;docker toolbox的最新版本可在上找到。您可能对它感兴趣,它解决了将主机目录映射到1.10.3的许多问题,因此我现在有了
docker volume ls
。只是确认一下,当我按照您的描述装载卷时,我应该在容器内的
/volume data/
中看到
/data/db/
/data/configdb
目录?或者我如何知道我找到了正确的卷?另一个包含:已检查全部34个卷。只有2在/volume data/目录中有数据。其中一个包含:
drwxr-xr-x 2 999 999 4.0K 2015年8月22日\u tmp,drwxr-xr-x 2 999 999 4