2017-04-23 13 views
0

私は単純なような作業に多くの時間を費やしました。私はモノゴッド容器を使いたい。 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 

これらの行は、今、彼らは「私のコンテナで、このファイルであることを、私のホストからこのファイルをコピーする」言うように、最後に/を必要としています。 「ホストからこのファイルをコピーすると言うと、に入れます。フォルダをコンテナに入れます。あなたはRUN命令でそれを置けばあなたのスクリプトは、次に実行され、その層がイメージにコミットされます

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

:彼らは、以下のように読むべきである(しかし、さらに簡略化することができ、最後に最終Dockerfileを参照してください) 、あなたはモンゴを実行します(または単に空白のままにし、親(mongo)画像からデフォルトENTRYPOINT/CMDを継承するために最後に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

助けてくれてありがとう。上記のドッカーファイルの場合、次のエラーが発生しました ステップ5/5:RUN ./script.sh ---> 1d385c7df879で実行 /bin/sh:1:./script.sh:許可が拒否されました コマンド '/bin/sh -c ./script.sh 'はゼロ以外のコードを返しました:126 –

+0

謝罪、編集を確認してください^^ – johnharris85

+0

私は今このエラーになります ステップ5/5:RUN chmod + x script.sh && sync && ./script.sh ---> 6de14ed40581で実行中 2017-04-23T19:45:30.083 + 0000 \t [#...................... ]遺伝子番号\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失敗:dbサーバーに接続できません:到達可能なサーバーがありません 2017-04-23T19:45:30.598 + 0000 \t インポートされたコマンド '/ bin/sh -c chmod + x script.sh && sync && ./script.sh 'はゼロ以外のコードを返しました:1 –

0

私ができましたそれを行うが、別のコンテナを通して。 seジョブは、データをmongodbデータベースコンテナに挿入して終了することです。詳細については、受け入れられた回答hereを確認してください。 JSONファイルをcsvファイルとそれをインポートするコマンドで変更しましたが、mongodbがjsonとうまく機能することがわかりました。

関連する問題