私は次のような状況に陥っています。MongoDBを使用するNode.jsアプリケーションが1つあり、Docker Composeで2つのコンテナ(Nodeアプリケーション用とMongoDB用)を持つことができます。Docker Composeを使用してコンテナ内のコマンドを実行するには?
今、アプリはmongoimport
を使用してMongoにインポートされるcsv
ファイルをアップロードすることができます。
ノードの場合、を実行すると、exec
機能があるので、簡単です。それはそれのようなものをやっての問題になり、次のとおりです。
const exec = require('child_process').exec;
exec('mongoimport -d database -c collection --type csv file.csv', function (error, stdout, stderr) {
// Other stuff here...
});
唯一の問題は、次のとおりです。MongoDBのはノードアプリよりも、別の容器内にあるのでmongoimport
は、使用できなくなります!
これはどのように解決できますか?私はexecを使ってsshを使ってMongoのコンテナでこれを実行することを考えましたが、私はそれについて確信していません。
ノードアプリケーションからmongoimport
をMongoコンテナに実行するにはどうすればよいですか?
Node.jsコンテナにmongoツール/クライアントをインストールして、mongoimportを使用してMongoDBホストを指定できます。しかし、execを使わないノードベースのソリューションはきれいに見えるかもしれません。部分的には、csvデータとそれらのファイルの性質(サイズ、複雑さなど)によって何をしているかによって異なります。 – ldg
効率のためにノードベースのソリューションは避けていました。 250,000以上の行を含むファイルをインポートしています。 mongoimportでは、データはほとんど瞬時にインポートされ、Node.jsでは時間がかかりました。さて、これらのmongoツールをインストールするには、 'apt-get'文をドッカーファイルに追加する必要があります。 – user1620696
ええ - 仕事がそれほど重いのであれば、もう一つのアプローチは、ノードアプリケーションとボリュームを共有する別のコンテナ(ファイルを取得できるようにする)とビルドスペック(Dockerfile)です。 mongoimportと、Nodeアプリケーション(httpやpub/subなど)と通信できる小さなアプリケーションです。このモデルは、あなたのメインアプリやdbからの実際の機能(mongoimportなど)を抽象化することができるという点で優れています。 – ldg