如何坚持MongoDB – 一个正在运行的Docker容器的数据在一个新的图像?

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

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

我使用docker commit并创build了一个新的图像,推到docker集线器。 如果我拉在其他系统上的图像,并从这个图像创build一个新的容器,有没有像我的起源容器xyz数据。

经过研究,我发现mongo映像可以和一个卷一起使用,但是我错过了以前的这一步…我认为容器使用/ data / db作为标准卷( docker inspect ),在提交这个卷时没有附加到新的形象?

另外我试图docker export/import与上面提到的相同的问题!

现在我的问题,我怎么能达到迁移这个“xyz”运行容器与我的示例数据在一个新的图像/容器? 非常感谢!

我使用docker提交,并创build一个新的形象,推到docker集线器。 如果我拉在其他系统上的图像,并从这个图像创build一个新的容器,有没有像我的起源容器xyz数据。

mongo docker镜像将其数据写入卷中 。 因此,这些数据将不会保存到使用docker commit创build的新Docker镜像。 由于同样的原因docker export不会产生你的数据。

我怎么能达到迁移这个“xyz”运行容器与我的示例数据在一个新的图像/容器?

你想要的是:

  • 创build一个新容器,重新使用第一个容器的容量→请参阅--volumes-from
  • 将第一个容器的卷数据保存到您的docker主机上的一个目录中,并创build一个将此目录加载到容器中的新容器→ docker run -v选项

另外,这个SO问题可能会帮助你弄清楚数量。

我想创build一个图像来testing身份validation的事情,我有同样的问题。 我这样解决了它:

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! 当你运行这个镜像时,你有一个激活身份validation的mongodb和一个root用户。 关键是通过将数据存储在其他地方来解决基本Dockerfile中的VOLUME问题。