如何在新图像中保留MongoDB - 正在运行的Docker容器的数据?

时间:2016-01-12 21:05:54

标签: mongodb docker

我有一个名为xyz的正在运行的Mongo数据库容器来自官方Mongo Image。我使用docker run -d -p 21707:21707 mongo创建了容器 在这个容器中,我创建了2个包含样本数据的集合。

现在我想在dockerhub上的新图像中提取此容器。

我使用docker commit并创建了一个新图像,将其推送到docker hub。如果我在另一个系统上拉图像并从该图像创建一个新容器,则我的原始容器xyz中没有数据。

经过研究我发现mongo图像可以用于卷,但我过去错过了这一步...我认为容器使用/ data / db作为标准卷(docker inspect),on提交此卷未附加到新映像?!

我也尝试了docker export/import上面提到的同样问题!

现在我的问题,我怎样才能在新的图像/容器中使用我的样本数据迁移这个“xyz”运行容器? 非常感谢!

2 个答案:

答案 0 :(得分:5)

  

我使用了docker commit并创建了一个新图像,将其推送到docker hub。如果我在另一个系统上拉图像并从该图像创建一个新容器,则没有像我的原始容器xyz中那样的数据。

mongo docker镜像将其数据写入volume。因此,这些数据不会保存到使用docker commit创建的新docker镜像。由于同样的原因,docker export不会生成您的数据。

  

我怎样才能将这个“xyz”运行容器与我的样本数据一起迁移到新的图像/容器中?

你想要的是:

  • 创建一个新容器,重新使用第一个容器的卷→请参阅--volumes-from
  • 将第一个容器的卷数据保存到docker主机上的目录中,并在容器中创建一个新容器挂载此容器→docker run -v option

此外,此SO question可能会帮助您确定数量。

答案 1 :(得分:1)

我想制作一个图片来测试身份验证方面的问题,我也有同样的问题。我这样解决了:

<强> Dockerfile

FROM mongo

COPY setup.sh /
RUN chmod +x /setup.sh
RUN /setup.sh

ENTRYPOINT ["/usr/bin/mongod"]
CMD ["--auth", "--dbpath=/containerdb"]

<强> setup.sh

#!/bin/bash

mkdir containerdb

mongod --auth --dbpath=/containerdb &

until mongo admin --eval 'db.createUser({"user":"root", "pwd":"password", "roles": [ "root" ] })'
do
  echo 'Mongo not yet ready, waiting 1 sec until retry'
  sleep 1
done

mongod --shutdown --dbpath=/containerdb

的Bim!运行此映像时,您将拥有一个激活了身份验证的mongodb和一个root用户。 关键是通过将数据存储在其他地方来解决基本Dockerfile中的VOLUME。