Ich habe eine App mit folgenden Diensten:
web/
- hält einen Python 3-Flask-Webserver auf Port 5000 und führt ihn aus. Verwendet sqlite3.worker/
- hat eineindex.js
Datei, die ein Arbeiter für eine Warteschlange ist. Der Webserver interagiert mit dieser Warteschlange über eine JSON-API über Port9730
. Der Worker verwendet Redis zur Speicherung. Der Worker speichert Daten auch lokal im Ordnerworker/images/
Jetzt betrifft diese Frage nur die 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
Wenn ich laufe docker-compose build
, funktioniert alles wie erwartet und alle npm-Module werden wie erwartet installiert /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>
Aber wenn ich das tue docker-compose up
, sehe ich diesen Fehler:
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)
Es stellt sich heraus, dass keines der Module vorhanden ist /worker/node_modules
(auf dem Host oder im Container).
Wenn auf dem Host, ich npm install
, dann funktioniert alles gut. Aber das will ich nicht. Ich möchte, dass der Container Abhängigkeiten behandelt.
Was läuft hier falsch?
(Unnötig zu erwähnen, dass alle Pakete enthalten sind package.json
.)
volumes: - worker/:/worker/
Block aus der docker-compose.yml
Datei zu entfernen . Diese Zeile überschreibt den Ordner, den Sie mit dem Befehl COPY erstellen.
When I run docker-compose build, everything works as expected and all npm modules are installed in /worker/node_modules as I'd expect.
- Wie hast du das überprüft?