Tengo una aplicación con los siguientes servicios:
web/
- mantiene y ejecuta un servidor web de matraz python 3 en el puerto 5000. Utiliza sqlite3.worker/
- tiene unindex.js
archivo que es un trabajador para una cola. el servidor web interactúa con esta cola utilizando una API json a través del puerto9730
. El trabajador usa redis para el almacenamiento. El trabajador también almacena datos localmente en la carpetaworker/images/
Ahora esta pregunta solo concierne a la 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
Cuando ejecuto docker-compose build
, todo funciona como se esperaba y todos los módulos npm se instalan /worker/node_modules
como esperaba.
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>
Pero cuando lo hago docker-compose up
, veo este error:
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)
Resulta que ninguno de los módulos está presente en /worker/node_modules
(en el host o en el contenedor).
Si en el host, yo npm install
, entonces todo funciona bien. Pero no quiero hacer eso. Quiero que el contenedor maneje las dependencias.
¿Qué está pasando mal aquí?
(No hace falta decir que todos los paquetes están incluidos) package.json
.
volumes: - worker/:/worker/
bloque del docker-compose.yml
archivo. Esta línea sobrescribe la carpeta que crea con el comando COPIAR.
When I run docker-compose build, everything works as expected and all npm modules are installed in /worker/node_modules as I'd expect.
- ¿Cómo verificaste esto?