ノード・アプリケーションの1つをドッキングしています。このアプリケーションの機能の1つは、最初にmongoexportを使用してmongodbデータをダウンロードし、ファイルに書き込むことです。ドッキング・ノード・アプリケーション実行時に「エラー:mongoexport ENOENTを生成する」
私はchild_process産卵
var spawn = require('child_process').spawn;
var mongoExport = spawn('mongoexport', [
'--db', 'dbname', '--collection', 'collection1',
'--fields',
'name,address,city,country,pincode',
'--type', 'csv'
]);
アプリの開始を使用してこれを行うと、私は、コマンドプロンプトから「ノードapp.js」を実行すると正常に動作しています。
しかし、このノードアプリケーションをドッキングして実行しようとすると、「エラー:スポーンmongoexport ENOENT」と表示されます。
私はmongoexportをコメントアウトによって確認された一つの容器でのMongoDBを実行し、私は、この問題をデバッグするために、次の試してみましたMongoDBのコンテナ
docker run --restart=always --name mongo-rnd -v /opt/mongo_rnd:/data/db -d mongo:3.2.7
docker run -e "MONGO_HOST=mongo-rnd" -p 8081:8081 -d --name nodeapp --link mongo-rnd:mongo-rnd nodeappimageid
との連携、他の容器内のノードアプリ、
- すべての機能が正常に動作します。
- ドッカーコンテナ内のchild_processに問題があると考えました。だから、私は、単純な「1!」コマンド
const ls = spawn('ls', ['-lh', '/usr']); ls.stdout.on('data', function(data){ console.log("stdout:" + data); });
ない問題にしようとした、それがうまく働きました。
私の結論は、 'mongoexport'コマンドはnodejsドッカーコンテナの内部では使用できません。
誰でもこれを達成する方法がありますか?またはこれを行うことはできませんか?
は、ここで私は正しく推測しているとして、問題は「MongoDBのは」nodeappコンテナにインストールされていなかったということです参照
FROM node:wheezy
RUN mkdir -p /usr/src/temp
COPY . /usr/src/temp
WORKDIR /usr/src/temp
RUN npm install
ENV PORT=8081
ENV MONGO_HOST "localhost"
EXPOSE 8081
CMD node app.js
:
私がしなければならなかったすべては、私がmongoexportコールで
--host
と--port
を指定する必要がありましたコードからnodeappコンテナでのMongoDBをインストールするには、Dockerfileに以下の行を追加しました'--type'が冗長で' --csv'だけで十分ですか? [mongoexport with parameters + node.js + child process](http://stackoverflow.com/a/20176549/1983854)にあります。 mongoexport 3.0.0の '--type = csv'の([https://docs.mongodb.com/manual/reference/program/mongoexport/]参照)が正しい方法です。 – fedorqui
はい。あなたは正しいです。 --typeは最新のmongoで認識されません(私は3.2.7でテストしていました)。 --csvとして指定するのに十分です – Chandru