Mam aplikację z następującymi usługami:
web/- przechowuje i uruchamia serwer WWW z kolbą Pythona 3 na porcie 5000. Używa sqlite3.worker/- maindex.jsplik, który jest robotem dla kolejki. serwer WWW wchodzi w interakcję z tą kolejką za pomocą interfejsu API json przez port9730. Pracownik używa Redis do przechowywania. Pracownik przechowuje również dane lokalnie w folderzeworker/images/
Teraz to pytanie dotyczy tylko 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
Po uruchomieniu docker-compose buildwszystko działa zgodnie z oczekiwaniami, a wszystkie moduły npm są instalowane /worker/node_moduleszgodnie z oczekiwaniami.
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>
Ale kiedy to robię docker-compose up, widzę ten błąd:
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)
Okazuje się, że żaden z modułów nie jest obecny /worker/node_modules(na hoście lub w kontenerze).
Jeśli na hoście, ja npm install, wtedy wszystko działa dobrze. Ale nie chcę tego robić. Chcę, aby kontener obsługiwał zależności.
Co tu idzie nie tak?
(Nie trzeba dodawać, że wszystkie paczki są w package.jsonśrodku).
volumes: - worker/:/worker/blok z docker-compose.ymlpliku. Ten wiersz nadpisuje folder utworzony za pomocą polecenia KOPIUJ.
When I run docker-compose build, everything works as expected and all npm modules are installed in /worker/node_modules as I'd expect.- Jak to sprawdziłeś?