如何将数据导入mongodb容器并创建图像

时间:2017-04-23 19:03:22

标签: mongodb docker dockerfile

我花了很多时间在一项似乎很简单的任务上。我想运行一个monogodb容器。然后将csv文件复制到容器中或从docker文件执行命令将csv文件导入mongodb数据库。我尝试使用RUN,script.sh,但没有任何工作。请帮忙。 我想自动完成任务,当我复制数据时,我会为自动化任务创建一个新图像。

这是我的Dockerfile。

FROM mongo
RUN mkdir -p /app/data
WORKDIR /app/data
COPY gene.csv /app/data
COPY script.sh /app/data
EXPOSE 27017
# CMD ["/app/data/script.sh"]

脚本文件是

#! /bin/sh 
mongoimport -d Gene -c genes --type csv --file gene.csv --headerline

3 个答案:

答案 0 :(得分:2)

为时已晚,也许对其他人有所帮助。

from("direct:anywhere")
  .process(e -> { e.getIn().setHeader("isComplete", false)})
  .multicast()
    .parallelProcessing(true)
    .to("direct:somewhere", "direct:somewhere2")
    .end()
  .aggregate(header("isComplete"))
    .completion(header("isComplete").isEqualTo(true))
    .completionSize(1); // do i need this at all if i want the fastest route?
  .choice()..... // based on the fastest route's logic do something else with the exchange.getIn() headers or body

答案 1 :(得分:1)

编辑:这个答案解决了一个问题,但没有解决 问题,因为显然mongo必须运行才能使其中任何一个工作。在这种情况下,自定义入口点可能是要走的路。

使用CMD是正确的方法,因为当您使用COPY时,您实际上可以运行Mongo进程。不过,您的问题在于COPY gene.csv /app/data COPY script.sh /app/data 说明。

/

这些行最后需要Dockerfile,因为现在他们说要从我的主机复制此文件,将其作为我的容器中的此文件'。而您正试图在我的容器中说明将此文件从我的主机复制到此文件夹 。它们应如下所示(但可以进一步简化,最后见最终COPY gene.csv /app/data/ COPY script.sh /app/data/ ):

RUN

如果您将脚本放在CMD指令中并且该图层将被提交到图像中,那么您的脚本将会运行,然后您可以在最后运行ENTRYPOINT来运行mongo(或者只是离开它是空白的并从父(CMD)图片继承默认的mongo / Dockerfile。因此完整的FROM mongo WORKDIR /app/data # This will be created if it doesn't exist COPY gene.csv . COPY script.sh . RUN chmod +x script.sh && sync && ./script.sh 变为:

{{1}}

答案 2 :(得分:0)

我能够通过另一个容器做到这一点。谁的工作是将数据插入到mongodb数据库容器中并退出。有关详细信息,请查看已接受的答案here。我使用我的csv文件和导入它的命令更改了JSON文件,尽管我发现mongodb在json中效果更好。