노드 응용 프로그램 중 하나를 도킹하는 중입니다. 이 응용 프로그램의 기능 중 하나는 처음에 mongoexport를 사용하여 mongodb 데이터를 다운로드하고 파일에 기록하는 것입니다.도킹 된 노드 응용 프로그램을 실행할 때 "오류 : spong 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"이 표시됩니다.
은 내가 시도
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
MongoDB를 컨테이너에 링크 된 다른 컨테이너에 하나 개의 컨테이너에 MongoDB를하고, 노드 응용 프로그램을 실행하는이 문제를 디버깅하는 다음,
- 나는 mongoexport을 주석에 의해 확인 기능, 모든 것이 잘 작동합니다.
- 도커 컨테이너 내부의 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'만으로 충분할 수 있습니까? [매개 변수 + node.js + 자식 프로세스가있는 mongoexport] (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