我花了很多时间在一项似乎很简单的任务上。我想运行一个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
答案 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中效果更好。