我正在对我们的一个节点应用程序进行docker化。这个应用程序的一个功能是,一开始,应用程序使用mongoexport下载mongodb数据并写入文件。
我正在使用child_process spawn
这样做var spawn = require('child_process').spawn;
var mongoExport = spawn('mongoexport', [
'--db', 'dbname', '--collection', 'collection1',
'--fields',
'name,address,city,country,pincode',
'--type', 'csv'
]);
当我从命令提示符运行'node app.js'时,应用程序启动并正常工作。
但是,当我将此节点应用程序停靠,并尝试运行时,我得到“错误:生成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
我已尝试以下方法来调试此问题,
const ls = spawn('ls', ['-lh', '/usr']); ls.stdout.on('data', function(data){ console.log("stdout:" + data); });
没问题,它工作正常。
所以,我的结论是命令'mongoexport'在nodejs docker容器中不可用。
任何人都知道如何实现这一目标?或者不可能这样做?
这是我的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
答案 0 :(得分:4)
正如我正确猜测的那样,问题是“mongodb'没有安装在nodeapp容器中。
我所要做的就是在Dockerfile中添加以下行,在nodeapp容器中安装mongodb
RUN apt-get update
RUN apt-get install -y mongodb
从代码中我必须在mongoexport调用中指定--host
和--port
:
var mongoExport = spawn('mongoexport', [
'--db', 'dbname', '--host', 'mongo-rnd', '--port', 27017, '--collection', 'collection1','--fields', 'name,address,city,country,pincode',
'--csv']);