我正在dockerizing我們的一個節點應用程序。此應用程序的一個特點是,應用程序一開始就使用mongoexport下載mongodb數據並寫入文件。運行dockerized節點應用程序時出現「錯誤:spawn 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」工作正常。
但是,當我dockerized這個節點的應用程序,並嘗試運行我得到「錯誤:產卵mongoexport ENOENT」。
我運行在一個容器的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
我曾嘗試連接以下調試這個問題,
- 我檢查註釋掉mongoexport功能,一切正常工作正常。
- 我想,這可能是docker容器內的child_process問題。所以,我用一個簡單的 'ls' 的命令
const ls = spawn('ls', ['-lh', '/usr']); ls.stdout.on('data', function(data){ console.log("stdout:" + data); });
沒有問題試過了,它工作得很好。
所以,我的結論是命令'mongoexport'不能在nodejs docker容器中使用。
任何人都有想法如何實現這一點?或者不可能做到這一點?
這裏是參考
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
難道'--type'是多餘的,'--csv'就夠了?見[mongoexport中帶參數+ node.js +子進程](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