【问题标题】:How to restore a mongo Docker container on the Mac如何在 Mac 上恢复 mongo Docker 容器
【发布时间】:2016-04-05 03:37:18
【问题描述】:

我删除了我的 mongo 容器

docker rm myMongoDB

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

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

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

它不会运行并且它的状态显示Exited (2) 8 seconds ago

【问题讨论】:

  • 如果您的容器使用volume,则数据可能在您的计算机上仍然可用。见stackoverflow.com/questions/26009619/…。在做任何事情之前备份文件夹,以防出现任何问题。
  • @warmoverflow 我已经看到了 stackoverflow 条目,但我没有 /var/lib/docker 目录。不知道是因为我上次使用 mongodb 后升级到 El Capitan,还是因为它是 Mac,而不是 Linux。
  • @thaJeztah 提供了一个很好的答案。此外,由于您使用的是 Mac OS X,因此您使用的是 Docker Toolbox。 /var/lib/docker 文件夹位于 docker toolbox vm 中,您可以使用 docker-machine ssh default 登录。

标签: macos mongodb docker osx-elcapitan


【解决方案1】:

Docker Hub (https://hub.docker.com/_/mongo/) 上的官方mongo 镜像定义了两个卷来存储数据in the Dockerfile。如果您在运行容器时没有明确指定 -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 映像文档中的 Where to Store Data 部分,以防止丢失您的数据。

注意

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

【讨论】:

  • 显然,“存储数据的位置”部分有一个针对 OS X 的警告,它表示无法运行将数据目录映射到主机的 MongoDB 容器。很高兴知道!无论如何,我的数据现在应该在/data/... 目录(-ies)中。但是,我没有/data/ 目录。可能是我最近将 OS X 升级到 El Capitan 时,它被消灭了??
  • 另外,我的 Docker 上没有 docker volume ls 命令。 docker: 'volume' is not a docker command. 我在 Docker 1.8.1 上,以防 volume 是新命令。
  • 看起来你正在运行旧版本的 Docker;最新版本的 docker 工具箱可以在 github.com/docker/toolbox/releases 找到。您可能对blog.docker.com/2016/03/docker-for-mac-windows-beta 感兴趣,它解决了映射主机目录的许多问题
  • 我将 docker 升级到 1.10.3,所以我现在有docker volume ls。只是为了确认一下,当我按照您的描述安装卷时,我应该在容器内的 /volume-data/ 中看到 /data/db//data/configdb 目录?或者我怎么知道我找到了正确的卷?
  • 另一个包含:检查了所有 34 卷。 /volume-data/ 目录中只有 2 个有数据。一个包含:drwxr-xr-x 2 999 999 4.0K Aug 22 2015 _tmp, drwxr-xr-x 2 999 999 4.0K Aug 22 2015 journal, -rw------- 1 999 999 64M Aug 22 2015 local.0, -rw------- 1 999 999 16M Aug 22 2015 local.ns, -rwxr-xr-x 1 999 999 0 Aug 22 2015 mongo.lock, -rw-r--r-- 1 999 999 69 Aug 22 2015 storage.bson
猜你喜欢
  • 2021-06-02
  • 2022-06-20
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多