J'ai une application avec les services suivants:
web/- contient et exécute un serveur Web flask python 3 sur le port 5000. Utilise sqlite3.worker/- a unindex.jsfichier qui est un ouvrier pour une file d'attente. le serveur Web interagit avec cette file d'attente à l'aide d'une API json sur le port9730. Le travailleur utilise redis pour le stockage. Le travailleur stocke également les données localement dans le dossierworker/images/
Or cette question ne concerne que le 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
Quand je cours docker-compose build, tout fonctionne comme prévu et tous les modules npm sont installés /worker/node_modulescomme je m'y attendais.
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>
Mais quand je le fais docker-compose up, je vois cette erreur:
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)
Il s'avère qu'aucun des modules n'est présent dans /worker/node_modules(sur l'hôte ou dans le conteneur).
Si sur l'hôte, je npm install, alors tout fonctionne très bien. Mais je ne veux pas faire ça. Je veux que le conteneur gère les dépendances.
Qu'est-ce qui ne va pas ici?
(Inutile de dire que tous les packages sont inclus package.json.)
volumes: - worker/:/worker/bloc du docker-compose.ymlfichier. Cette ligne écrase le dossier que vous créez avec la commande 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.- Comment avez-vous vérifié cela?