如何将数据导入到mongodb容器并创build一个图像

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

这里是我有的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 

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

使用RUN是正确的方法,因为当你使用CMD你可以运行Mongo进程。 但是,您的问题是与您的COPY说明。

 COPY gene.csv /app/data COPY script.sh /app/data 

这些行需要一个/最后,因为现在他们说'从我的主机复制这个文件,这个文件在我的容器'。 而你试图说'从我的主机复制这个文件, 我的容器中的这个文件夹 。 他们应该阅读如下(但可以进一步简化,最后看最后的Dockerfile ):

 COPY gene.csv /app/data/ COPY script.sh /app/data/ 

然后,如果将脚本放在RUN指令中,那么脚本将运行,并且该层将被提交到映像中,然后可以在末尾有一个CMD来运行mongo(或者将其保留为空,并从该ENTRYPOINTinheritance默认的ENTRYPOINT / 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 

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