【问题标题】:Docker how to run mongodb in dockerfileDocker如何在dockerfile中运行mongodb
【发布时间】:2015-08-11 14:09:41
【问题描述】:

我有一个运行 maven 构建的 dockerfile。我正在关注本指南:https://hub.docker.com/_/maven/

到目前为止,在我的 dockerfile 中,我有这个:FROM maven:3-jdk-8-onbuild

它运行构建并按预期失败,因为集成测试要求本地主机上的 mongodb 服务器正在运行。

我的问题是,我在dockerfile中写什么来创建一个有mongodb的镜像,在集成测试之前启动它,在集成测试之后停止mongodb服务器?

谢谢

【问题讨论】:

  • supervisord 将并行启动子进程。在这种情况下,您永远不会知道 mongodb 服务是否已经启动并在 maven 构建需要时运行。对于该构建,必须确保首先启动 mongodb。所以你需要一些顺序的东西。我在回答中描述了一个想法。

标签: mongodb docker boot2docker dockerfile docker-compose


【解决方案1】:

除了Dockerfile 语句中的其他语句之外,您还可以运行以安装 mongodb

例如,您可以使用tutum/mongodb Dockerfile 中的说明作为模板。

然后,您可以调用 shell 脚本,而不是直接使用 mvn 命令,而是先在其中启动 mongodb,然后执行 mvn,最后停止 mongodb。

【讨论】:

  • 我完全按照指南 docs.docker.com/articles/using_supervisord 进行操作(使用 ubuntu:14.04 而不是 13.04 除外),我收到此错误:supervisord.conf: no such file or directory
  • 那么您错过了Dockerfile 中的COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 指令。但是你为什么现在使用supervisord?在我的回答中,我没有写任何关于它的内容。在我对您的问题的评论中,我明确提到了为什么使用supervisord
  • 如果您使用supervisord,您将并行启动 mongodbmaven。当 maven 构建完成其集成测试时,您永远不知道 mongodb 是否已经启动并运行。因此,最好按顺序执行这些步骤。首先启动 mongodb 并等待它启动。然后运行maven。最后再次关闭 mongodb。这些步骤可以在您执行的 shell 脚本中完成,而不是 supervisord
  • 我阅读了您对我其他问题的回答。它起作用了,谢谢。我想看看 supervisord 是如何工作的。现在说到你说的shell脚本,我该怎么写呢?
  • 可以用CMD关键字调用shell脚本吗?
猜你喜欢
  • 1970-01-01
  • 2020-01-02
  • 2018-01-05
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多