다음 서비스를 갖춘 앱이 있습니다.
web/
-포트 5000에서 Python 3 플라스크 웹 서버를 보유하고 실행합니다. sqlite3을 사용합니다.worker/
-index.js
큐의 작업자 인 파일이 있습니다. 웹 서버는 json API over port를 사용하여이 대기열과 상호 작용합니다9730
. 작업자는 스토리지에 redis를 사용합니다. 작업자는 폴더에 로컬로 데이터를 저장합니다worker/images/
이제이 질문은에만 해당 worker
됩니다.
worker/Dockerfile
FROM node:0.12
WORKDIR /worker
COPY package.json /worker/
RUN npm install
COPY . /worker/
docker-compose.yml
redis:
image: redis
worker:
build: ./worker
command: npm start
ports:
- "9730:9730"
volumes:
- worker/:/worker/
links:
- redis
내가 실행 docker-compose build
하면 모든 것이 예상대로 작동하고 모든 npm 모듈이 예상대로 설치됩니다 /worker/node_modules
.
npm WARN package.json unfold@1.0.0 No README data
> phantomjs@1.9.2-6 install /worker/node_modules/pageres/node_modules/screenshot-stream/node_modules/phantom-bridge/node_modules/phantomjs
> node install.js
<snip>
그러나 내가 할 docker-compose up
때이 오류가 나타납니다.
worker_1 | Error: Cannot find module 'async'
worker_1 | at Function.Module._resolveFilename (module.js:336:15)
worker_1 | at Function.Module._load (module.js:278:25)
worker_1 | at Module.require (module.js:365:17)
worker_1 | at require (module.js:384:17)
worker_1 | at Object.<anonymous> (/worker/index.js:1:75)
worker_1 | at Module._compile (module.js:460:26)
worker_1 | at Object.Module._extensions..js (module.js:478:10)
worker_1 | at Module.load (module.js:355:32)
worker_1 | at Function.Module._load (module.js:310:12)
worker_1 | at Function.Module.runMain (module.js:501:10)
/worker/node_modules
호스트 또는 컨테이너에 모듈이없는 것으로 나타났습니다 .
호스트 인 경우 npm install
모든 것이 잘 작동합니다. 그러나 나는 그것을하고 싶지 않습니다. 컨테이너가 종속성을 처리하기를 원합니다.
무슨 일이야?
말할 필요도없이, 모든 패키지는 안에 package.json
있습니다.
volumes: - worker/:/worker/
에서 블록 을 제거 docker-compose.yml
하십시오. 이 줄은 COPY 명령으로 작성한 폴더를 덮어 씁니다.
When I run docker-compose build, everything works as expected and all npm modules are installed in /worker/node_modules as I'd expect.
-어떻게 확인 했어?