2017-04-23 58 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。

相關問題