我正在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