当前位置: 首页 > 知识库问答 >
问题:

如何将运行中的Docker容器的MongoDB数据保存在新映像中?

魏元白
2023-03-14

我有一个运行的Mongo DB容器,名为xyz,来自官方Mongo图像。我用docker run-d-p 21707:21707 mongo创建了这个容器,在这个容器中,我创建了两个带有样本数据的集合。

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

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

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

我还尝试了docker导出/导入,遇到了上面提到的同样问题!

现在,我的问题是,如何将这个“xyz”运行容器和我的样本数据迁移到一个新的映像/容器中?谢谢!

共有2个答案

刘明朗
2023-03-14

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

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

当您运行这个映像时,您有一个身份验证激活的mongoDB和一个root用户。关键是通过将数据存储在其他地方来解决基础Dockerfile中的音量问题。

宣煜
2023-03-14

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

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

我怎么能达到迁移这个"xyz"运行容器与我的样本数据在一个新的图像/容器?

你想要的是:

  • 重新使用第一个容器的卷创建一个新容器→ 参见

此外,这个问题可能会帮助你计算出数量。

 类似资料:
  • 我正在按照有关将ASP.NET MVC应用程序迁移到Windows容器的说明进行操作 我用过 而且似乎下载正确。 然后看到与前面相同的内容,但以“Service'w3svc'was started”行结尾 因此,-it命令似乎有助于让我感觉我已经成功启动了容器。 我实际上无法获得关于“-it”的帮助,因为当我运行时它没有列出

  • 问题内容: 这是我的问题: 我有一个任务在Amazon ECS上运行docker映像,但我想从容器的运行实例中创建一个新的docker映像。 我在Amazon Ecs上看到了实例的ID,我已经创建了AMI,但是我想创建一个新的docker image,可以从Amazon中提取它。 有任何想法吗 ? 问候和感谢 问题答案: 除了@Ben Whaley提供的答案外,我个人建议您 使用Docker AP

  • 问题内容: 我从dockerfile构建了Docker映像。我看到映像已成功构建,但是该如何处理?它不应该能够作为容器运行吗? 问题答案: 运行它的具体方法取决于您是否为图像指定了标签/名称。 使用名称(让我们使用 Ubuntu ): 没有名称,只需使用ID: 请参阅 Docker运行参考 以获取更多信息。

  • 问题内容: 我有一个以结尾的Dockerfile 该可以采取一些不同的论点,我也需要暴露口容器,所以如果我运行手动我做这样的事情: 如何在Jenkinsfile中执行此操作?我的测试将与此容器通信,因此它需要在运行测试之前运行。我在测试运行之前先让它运行,但我看不到如何指定 问题答案: 您可以使用withRun的第二个参数

  • 我想删除这两个图像 如何走出圈子?