2016-12-09 2 views
0

habe ich die folgende DockerfileEntwicklung env NodeJS und Docker

ROM node:argon 

# 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" ] 

Alles funktioniert gut, wenn ich bauen und führen Sie das Docker Bild

Allerdings, wenn ich

docker run -p 8080:8080 -v ~/projects/NodeJSExample/:/usr/src/app/ nodeexample 

betreibe ich bekam:

Error: Cannot find module 'express' 
    at Function.Module._resolveFilename (module.js:325:15) 
    at Function.Module._load (module.js:276:25) 
    at Module.require (module.js:353:17) 
    at require (internal/module.js:12:17) 
    at Object.<anonymous> (/usr/src/app/server.js:3:17) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Function.Module.runMain (module.js:441:10) 

Wie kann ich Dockerfile so konfigurieren, dass Codeänderungen dynamisch unterstützt werden?

+0

Hatten Sie eine 'npm-Installation' lokal ausgeführt, bevor Sie das Verzeichnis mounten? – Matt

Antwort

1

Das Problem, dem Sie gegenüberstehen, besteht darin, dass Sie ein Volume im Ordner /usr/src/app/ Ihres Containers deklarieren. Was es tut, ist, dass es den Ordner Ihres Containers durch den Ordner in Ihrem Dateisystem ersetzt, in dem der Befehl npm install nicht ausgeführt wurde.

Als ob Ihre Dockerfile gültig ist, und Sie können es so verteilen. Aber für lokale Entwicklungszwecke können Sie nicht npm install auf dem Image (Dockerfile) selbst ausgeführt werden. Sie müssen also nur den Befehl npm install auf Ihrem lokalen ~/projects/NodeJSExample/ ausführen, während der Container hochgefahren ist, und Sie können loslegen.

+1

Running 'docker run --rm -it -v ~/projects/NodeJSExample /:/usr/src/app/nodeexample npm install 'könnte die Deps auf den Datenträger holen. – balintant

+0

Einverstanden, aber dann fügen Sie die "--rm" -Option, um den Container danach zu löschen, wie es nicht mehr sinnvoll ist –

+0

Yup, bearbeitet den Befehl. Und auch hinzugefügt "-it", wenn Interaktionen benötigt werden. – balintant

Verwandte Themen