如何将数据导入mongodb容器并创建映像
我花了很多时间在一项看似简单的任务上。我想运行monogodb容器。然后将csv文件复制到容器中,或从docker文件执行命令,将csv文件导入mongodb数据库。我尝试使用RUN,script.sh,但没有任何效果。请帮忙。 我想自动化任务,当我复制数据时,我将为我的自动化任务创建一个新映像 这是我的文件如何将数据导入mongodb容器并创建映像,mongodb,docker,dockerfile,Mongodb,Docker,Dockerfile,我花了很多时间在一项看似简单的任务上。我想运行monogodb容器。然后将csv文件复制到容器中,或从docker文件执行命令,将csv文件导入mongodb数据库。我尝试使用RUN,script.sh,但没有任何效果。请帮忙。 我想自动化任务,当我复制数据时,我将为我的自动化任务创建一个新映像 这是我的文件 FROM mongo RUN mkdir -p /app/data WORKDIR /app/data COPY gene.csv /app/data COPY script.sh /ap
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 gene.csv /app/data
COPY script.sh /app/data
这些行的末尾需要一个/
,因为现在它们说“从我的主机复制这个文件,将这个文件放在我的容器中”。而您试图说‘将此文件从我的主机复制到我容器中的此文件夹’。它们应如下所示(但可以进一步简化,请参见结尾处的最终Dockerfile
):
如果您将脚本放入run
指令中,并且该层将提交到映像中,那么您的脚本将运行,然后您可以在末尾使用CMD
来运行mongo(或者将其留空,并从父级(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文件,尽管我发现mongodb使用JSON效果更好。太晚了,可能对其他人有所帮助
FROM mongo
RUN mkdir -p /app/data
WORKDIR /app/data
COPY gene.csv /app/data
COPY script.sh /app/data
CMD ["mongod", "&&", "mongoimport", "-d", "Gene", "-c", "Genes", "--file", "gene.csv", "--headerline"]
为什么要使用bash脚本,为什么不使用node?为什么要使用@DanGreen Leipciger?我看不出任何可能的理由来选择node来完成如此轻量级的任务,但我在这方面没有专业知识,所以这是一个真正的问题。如果您已经使用过它,它只是简单快捷。默认情况下在cli中运行,$node myscript.js
。它也不需要配置并且可以在任何机器上运行。此外,MongoDB有一个惊人的节点界面,所有上述命令都可用。此外,如果需求变得更加复杂,OP将可以访问NPM上可用的所有节点工具。这是一件非常常见的事,我想知道为什么它还没有出现在网上。实际上我正在做的是:我正在创建一个web应用程序,并且我已经编写了一个docker-compose.yml文件。如果我能够输入数据并制作图像,用户所要做的就是docker compose并浏览到localhost:3000/genes以查看数据。感谢帮助。对于上面的docker文件,我得到了以下错误步骤5/5:运行。/script.sh--->在1d385c7df879/bin/sh中运行:./script.sh:权限拒绝命令“/bin/sh-c./script.sh”返回一个非零代码:126I现在收到此错误步骤5/5:运行chmod+x script.sh&&sync&&./script.sh-->在6de14ed40581 2017-04-23T19:45:30.083+0000[#……]Gene.genes 4.00KB/57.6KB(6.9%)2017-04-23T19:45:30.598+0000[#……]基因。基因4.00KB/57.6KB(6.9%)2017-04-23T19:45:30.598+0000失败:连接到db服务器时出错:无法访问服务器2017-04-23T19:45:30.598+0000导入了0个文档命令“/bin/sh-c chmod+x script.sh&&sync&&&./script.sh”返回了一个非零代码:1我在一小时前的某个地方读到,您必须重新启动db或类似的东西。不知道他们为什么让它如此复杂复杂。我对mongo不太熟悉。mongo是否需要运行才能正常工作?如果需要,那么我们将需要一个不同的解决方案。如果我们在执行脚本之前从mongo CMD[“usr/bin/mongod”,“--smallfiles”]给出答案。同样的错误,我将检查它。感谢您的回复
FROM mongo
RUN mkdir -p /app/data
WORKDIR /app/data
COPY gene.csv /app/data
COPY script.sh /app/data
CMD ["mongod", "&&", "mongoimport", "-d", "Gene", "-c", "Genes", "--file", "gene.csv", "--headerline"]