2017-04-23 91 views
0

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

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

为什么你使用bash脚本,为什么不使用节点? –

+0

为什么@ DanGreen-Leipciger?我看不出任何可能的理由来选择节点来实现这样一个轻松的轻量级任务,但我对这个真正的问题没有专业知识。 – johnharris85

+0

只要你已经使用它,它只是快速和容易。默认情况下,在cli中运行'$ node myscript.js'。它也不需要配置,可以在任何机器上运行。 –

回答

1

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

使用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)图像默认ENTRYPOINT/CMD所以全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 
+0

感谢您的帮助。对于上面的docker文件,我得到以下错误 步骤5/5:运行./script.sh --->运行在1d385c7df879 /bin/sh:1:./script.sh:权限被拒绝 命令'/bin/sh -c ./script.sh'返回一个非零代码:126 –

+0

道歉,检查编辑^^ – johnharris85

+0

我现在得到这个错误 第5步:运行chmod + x script.sh && sync && ./script.sh --->运行于6de14ed40581 2017-04-23T19:45:30.083 + 0000 \t [#...................... 。] Gene.genes \t 4.00KB/57.6KB(6.9%) 2017-04-23T19:45:30.598 + 0000 \t [#.................... ...] Gene.genes \t 4.00KB/57.6KB(6.9%) 2017-04-23T19: 45:30.598 + 0000 \t失败:连接到数据库服务器的错误:无法访问服务器 2017-04-23T19:45:30.598 + 0000 \t已导入0文档 命令'/ bin/sh -c chmod + x script.sh && sync && ./script.sh'返回一个非零代码:1 –

0

我能要通过另一个容器来做到这一点se工作是将数据插入到mongodb数据库容器中并退出。欲了解更多详情,请查看接受的答案here。我用我的csv文件和导入它的命令更改了JSON文件,尽管我发现mongodb可以更好地使用json。

相关问题