2016-07-26 8 views
0

Ich habe ein Problem hier, wenn ich versuchte, meinen lokalen Quellcode in den Container zu bauen und zu verbinden. Würde mich freuen, wenn Sie beraten könnten.Dockers Container Quellcode-Montage in Ubuntu fehlgeschlagen

Hier ist meine Docker-Datei pro angeschlossenen Screenshot.

Was ich versuche zu tun ist im Grunde, ich möchte einen NodeJs Container erstellen und meinen lokalen Nodejs Quellcode in den Container einhängen. Es scheint, dass mein lokaler Quellcode-Ordner nicht in das Volume eingebaut ist,

Auch hier erwähnenswert. Ich sah einige Blogs und es sagt, Downgrade der Version auf Docker-Version auf 1.6 wird dieses Problem beheben. Ist das richtig?

Bitte beachten Sie die angehängte Dockerfile als Bild.

Bitte helfen und wird sehr geschätzt.

Vielen Dank.

Dockerfile error_message

+0

Was ist die Fehlermeldung, die Sie bekommen? –

+0

Hallo Samuel, tatsächlich, wenn ich den "run" -Befehl in der Eingabeaufforderung ausführen, gibt es die GUID zurück. Ohne irgendeinen Fehler. Aber wenn ich den Laufstatus mit diesem Befehl "docker ps -a" überprüfe, sah ich, dass der Status beendet wurde. Wenn ich weiter mit den "Docker Logs" eintauche, bekam ich die Fehlermeldung "Express Modul nicht gefunden". Es scheint, dass die Installation von npm nicht funktioniert. Irgendeine Idee? Bitte sehen Sie sich die Screenshots an. – DavidB

+0

@SamuelToh, Ich habe die Fehlermeldung oben Screenshot beigefügt. Bitte beraten. Danke. – DavidB

Antwort

0

F: Warum ist meine Anwendung in Docker Behälter mit Fehler Fehler Cannot find module 'express'?

A: Wie im Kommentar hervorgehoben - es ist aufgrund der Art, wie OP seinen Container beginnt. Übrigens hatte OP sein aktuelles Arbeitsverzeichnis, das eine Überprüfung seiner NodeJS-Anwendung ist, in das Verzeichnis /var/www des Containers gemappt, wo er während des erstellten Bildes die npm install ausgeführt hatte. Und das hätte bewirkt, dass die Dateien im aktuellen Arbeitsverzeichnis das überschreiben, was das Bild zuvor erstellt hat, auch, da OP in seinem aktuellen Arbeitsverzeichnis keine npm install erstellt hat. Daher werden die express Abhängigkeiten nicht installiert.

Q: Könnten Sie mir bitte mit der Lösung zur Verfügung stellen, wie meine lokale Quelle in den Behälter

A montieren: Soweit ich von unseren Kommentaren berichten. Du machst das schon. Mit den -v Optionen aus der docker Binärdatei können Sie das Dateisystem des Hosts in den Container laden.

Ich bin mir nicht sicher, was ist Ihr tatsächlicher Anwendungsfall hier. Wenn Sie möchten, dass der Container seinen Node-Prozess verwendet, um Code vom Dateisystem Ihres Computers (des Hosts) auszuführen, sollte Ihr ursprünglicher Befehl docker run -d -p 80:80 -v $(pwd):/var/www ... die Aufgabe übernehmen. Alles, was Sie brauchen, ist nur npm install auf Ihrem aktuellen Arbeitsverzeichnis ausführen. Was auch immer Sie auf Ihrem Host tun, die Dateiänderungen werden in das Verzeichnis /var/www des Containers übernommen.

+0

Was ich unter den Vorteilen eines Docker-Containers für Entwickler verstehe, ist, dass der Entwickler den Quellcode aus dem Repo herunterladen und die lokalen Quelldateien einfach in den Container einhängen kann. In meinem Fall möchte ich einen benutzerdefinierten Docker-Container erstellen, in dem alle Abhängigkeiten im Container installiert sind. Wenn ich einfach den "node" einfachen Container starte, wird mir der selbe Fehler "Express module not found" angezeigt. – DavidB

+0

Wir checken auch nicht das Verzeichnis node_modules in den Quell-Repo ein, sondern das Paket.json. Zurück zu Ihrer Antwort hier, das bedeutet, dass der Entwickler NPM auf dem lokalen Rechner installieren muss, um "npm install" zu starten? Ich hoffe, dass das Sinn macht. Danke. – DavidB

+0

Für mich Installation 'npm' auf der Maschine ist eine bessere Herangehensweise, sonst wirst du das Bild neu aufbauen, wenn Abhängigkeiten hinzugefügt oder Updates hinzugefügt werden? Trotzdem denke ich, was du machen wolltest, ist nicht unmöglich. U kann die Deps entweder 'npm global mit' -g' installieren option oder do npm install und verschiebe das node_modul in ein anderes Verzeichnis als '/ var/www' und aktualisiere dann die Umgebungsvariable' NODE_PATH', um auf sie zu zeigen, damit der Knoten weiß, wo er die dep finden kann montiere das Volume immer noch wie du. –

Verwandte Themen