Ich versuche zu verwenden Docker-komponieren zum Ausführen mehrerer Dienste (Redis, Mongo und Express-App). Ich möchte, dass mein Host mit dem Container "verbunden" wird, so dass beim Ändern von Dateien auch Dateien im Container geändert werden.Docker - Probleme bei der Freigabe Volume-Host: Container
Die Express-App hat ihre Dockerfile, die npm install
ausführen.
Wenn ich versuche, docker-compose up
, Im den folgenden Fehler erhalten:
web_1 | [nodemon] 1.9.2
web_1 | [nodemon] to restart at any time, enter `rs`
web_1 | [nodemon] watching: *.*
web_1 | [nodemon] starting `node server/app.js`
web_1 | module.js:328
web_1 | throw err;
web_1 | ^
web_1 |
web_1 | Error: Cannot find module 'express'
web_1 | at Function.Module._resolveFilename (module.js:326:15)
web_1 | at Function.Module._load (module.js:277:25)
web_1 | at Module.require (module.js:354:17)
web_1 | at require (internal/module.js:12:17)
web_1 | at Object.<anonymous> (/blog/server/app.js:5:15)
web_1 | at Module._compile (module.js:410:26)
web_1 | at Object.Module._extensions..js (module.js:417:10)
web_1 | at Module.load (module.js:344:32)
web_1 | at Function.Module._load (module.js:301:12)
web_1 | at Function.Module.runMain (module.js:442:10)
web_1 | [nodemon] app crashed - waiting for file changes before starting...
Sie wirft es nicht ausdrücklich Modul finden.
Um zu überprüfen, dass der Build-Prozess in der package.json angegebenen richtig die Abhängigkeiten installiert, Im den Behälter mit/bin/bash Einstiegspunkt ausgeführt wird:
docker run -it --rm --entrypoint /bin/bash image_name
Im Inneren des Behälters, node_modules
Ordner vorhanden . Ich kann nodemon server/app
auch laufen lassen und App-Läufe richtig ausdrücken (die Verbindung von den anderen Dienstleistungen natürlich verfehlend).
Hier ist es die `Dockerfile' für die ausdrückliche App:
FROM node:argon
MAINTAINER xxxxxxxx
# Install globally nodemon
RUN npm install nodemon -g
# Make folder that contains blog
RUN mkdir -p blog
# Set up working directory (from now on we are located inside /blog)
WORKDIR /blog
# Add package
ADD ./package.json /blog
# Install dependencies defined in packaje.json
RUN npm install
# Copy data
ADD ./ /blog
Und hier die docker-compose.yml
:
version: '2'
services:
db:
image: mongo
ports:
- "27017:27017"
cache:
image: redis
ports:
- "6379:6379"
web:
environment:
NODE_ENV: 'development'
build: .
command: nodemon server/app.js
volumes:
- ./:/blog
ports:
- "8000:8000"
depends_on:
- cache
- db
Könnte es etwas im Zusammenhang mit VOLUMEN sein?.
In meiner lokalen Umgebung habe ich keinen Ordner node_modules. Ist das volumes
Tag, das ich in dem docker-compose.yml definiert habe, das das node_modules folder
verbirgt, das mit docker-compose built
gebaut wird ?.