2017-02-04 2 views
1

Es tut mir leid für meine sehr Neuling Frage, aber ich habe einen schrecklichen Tag herauszufinden, diesen Fehler, ich habe eine Express-App und ich versuche, es auszuführen in Docker komponieren. Ich habe diese Dockerfile verwendet:Kann nicht finden, Modul für einen Knoten js App läuft in einem Docker komponieren Umgebung

FROM mhart/alpine-node 
RUN mkdir -p /usr/src/app 
RUN chmod -R 777 /usr/src/app 
WORKDIR /usr/src/app 
RUN npm install node-gyp -g 
RUN npm install nodemon -g 
ENV NODE_ENV development 
EXPOSE 3000 

Und diesen Teil meiner Docker-Compose-Datei:

backend: 
    mem_limit: 100m 
    build: 
     context: . 
     dockerfile: dockerfiles/node/Dockerfile 
    command: npm start 
    depends_on: 
     - mongo 
     - elasticsearch 
    volumes: 
     - ./backend/:/usr/src/app 
    ports: 
     - 3000:3000 
    links: 
     - "mongo:mongo" 
     - "elasticsearch:elasticsearch" 

Wenn ich Docker-komponieren up zu tun, bekomme ich diesen Fehler:

backend_1  | npm info it worked if it ends with ok 
backend_1  | npm info using [email protected] 
backend_1  | npm info using [email protected] 
backend_1  | npm info lifecycle [email protected]~prestart: [email protected] 
backend_1  | npm info lifecycle [email protected]~start: [email protected] 
backend_1  | 
backend_1  | > [email protected] start /usr/src/app 
backend_1  | > nodemon index.js 
backend_1  | 
backend_1  | [nodemon] 1.11.0 
backend_1  | [nodemon] to restart at any time, enter `rs` 
backend_1  | [nodemon] watching: *.* 
backend_1  | [nodemon] starting `node index.js` 
backend_1  | module.js:471 
backend_1  |  throw err; 
backend_1  | ^
backend_1  | 
backend_1  | Error: Cannot find module 'dotenv' 
backend_1  |  at Function.Module._resolveFilename (module.js:469:15) 
backend_1  |  at Function.Module._load (module.js:417:25) 
backend_1  |  at Module.require (module.js:497:17) 
backend_1  |  at require (internal/module.js:20:19) 
backend_1  |  at Object.<anonymous> (/usr/src/app/index.js:1:63) 
backend_1  |  at Module._compile (module.js:570:32) 
backend_1  |  at Object.Module._extensions..js (module.js:579:10) 
backend_1  |  at Module.load (module.js:487:32) 
backend_1  |  at tryModuleLoad (module.js:446:12) 
backend_1  |  at Function.Module._load (module.js:438:3) 
backend_1  | [nodemon] app crashed - waiting for file changes before starting... 

Wenn ich ls -al in der Backend Container mache, bekomme ich eine vollständige Liste meiner b ackend app Ordner Inhalt, aber es klingt wie knoten_module Abhängigkeiten werden nicht erkannt.

Antwort

3

Sie müssen die Abhängigkeiten in dem Container installieren, der in Ihrer Dockerfile fehlt.

Die gängige Methode besteht darin, eine Dockerfile zu erstellen, die Ihre Anwendung bereits kennt, und Ihre package.json Datei kopieren und eine npm install durchführen.

Dadurch kann Ihr Container alle Codeabhängigkeiten finden, wenn Sie Ihre Anwendung später ausführen.

Sehen und Beispiel hier: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

Die Probe Dockerfile:

FROM node:boron 

# Create app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

# Install app dependencies 
COPY package.json /usr/src/app/ 
RUN npm install 

# Bundle app source 
COPY . /usr/src/app 

EXPOSE 8080 
CMD [ "npm", "start" ] 

Sie müssen möglicherweise Pfade für den COPY Befehl anzupassen, natürlich.

+2

Ich habe den gleichen Leitfaden gefolgt, aber ich habe immer noch das gleiche Problem – jemlifathi

+0

Ihre Dockerfile fehlt alle 'package.json' Zeug, oder Sie haben nicht die vollen Sachen eingefügt. In Ihrer Frage gibt es überhaupt keine 'npm-Installation', deshalb gibt es nichts in' node_modules'. Überprüfen Sie Ihre Pfade innerhalb des Containers, d. H. Dass sich Ihr Knotencode im selben Ordner wie Ihre Knotenmodule befindet. Ihr Code wird mit der 'volume' in Docker-compose gemountet, aber die Abhängigkeiten werden von Ihrer' Dockerfile' kommen. – CharlieBrown

+0

Eigentlich enthält mein WORKDIR alle meine Projektdateien, aber beim Starten der App kann es keine Abhängigkeiten vom Ordner node_modules abrufen !!! – jemlifathi

Verwandte Themen