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.js
fichier 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_modules
comme 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.yml
fichier. 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?