npm package.json und docker (mounten es ...)

8

Ich benutze Docker, daher mag dieser Fall komisch aussehen. Aber ich möchte, dass mein gesamtes /data -Verzeichnis bei der Entwicklung in meinen Docker-Container eingebunden wird.

Mein /data Ordner Container meine package.json Datei, ein app Verzeichnis und eine Menge anderer Sachen. Das Problem ist, dass ich möchte, dass mein Ordner node_modules NICHT persistent ist, sondern nur die Datei package.json .

Ich habe ein paar Dinge ausprobiert, aber package.json und npm geben mir hier eine harte Zeit ...

  • Das direkte Anhängen der package.json -Datei bricht npm ab. npm versucht, die Datei beim Speichern umzubenennen, was bei einer angehängten Datei nicht möglich ist.
  • Wenn Sie den übergeordneten Ordner ( /data ) mounten, wird der Ordner node_modules geladen.
  • Ich kann keine Konfigurationsoption finden, um node_modules in einen anderen Ordner außerhalb von /data , Beispiel /dist zu stellen.
  • Putting package.json in /data/conf das mounten von /data/conf als Volume wird stattdessen nicht funktionieren. Ich kann keine Möglichkeit finden, den Pfad package.json in npmrc .
  • anzugeben
  • package.json wird in /data/conf eingefügt und die Verknüpfung mit /data/package.json funktioniert nicht. npm unterbricht den Symlink und ersetzt ihn durch eine Datei.

Das Kopieren von Daten hin und her zu / von innerhalb des Andock-Containers ist, wie ich es jetzt mache .. Ein wenig langweilig. Ich möchte auch eine saubere Lösung ..

    
xeor 05.11.2014, 12:30
quelle

5 Antworten

7

Wie Sie bereits geantwortet haben, denke ich, dass dies momentan die einzige Lösung sein könnte.

Wenn Sie Ihr Docker-Bild erstellen, tun Sie etwas wie:

%Vor%

Und für andere Sachen (wie Bower, mach dasselbe)

%Vor%

Und COPY data/ /data am Ende (Sie können also das Dockers-Caching verwenden und müssen nicht die Installation von npm / docker vornehmen, wenn eine Änderung an data vorgenommen wurde.

Sie müssen auch die benötigten symbolischen Links erstellen und in Ihrem git-repo speichern. Sie werden von außen ungültig sein, werden aber im Inneren des Containers funktionieren.

Mit dieser Lösung können Sie Ihre $PWD/data:/data mounten, ohne die npm / bower "Junk" außerhalb Ihres Containers zu bekommen. Und Sie können Ihr Image weiterhin als eigenständige Bereitstellung Ihres Service erstellen.

    
edos 10.11.2014, 13:58
quelle
4

Eine ähnliche und alternative Möglichkeit besteht darin, die Variable NODE_ENV zu verwenden, anstatt einen Symlink zu erstellen.

RUN mkdir -p /dist/node_modules RUN cp -r node_modules/* /dist/node_modules/ ENV NODE_PATH /dist/node_modules

Hier erstellen Sie zuerst ein neues Verzeichnis für node_modules, kopieren alle Module dort und lassen Node die Module von dort lesen.

    
Deniz Ozger 06.03.2015 17:19
quelle
3

Ich habe dieses Problem schon seit einiger Zeit und die akzeptierte Lösung funktionierte nicht für mich *

Ich habe diesen Link gefunden, der eine Bearbeitung hatte, die auf hier und das hat tatsächlich für mich funktioniert:

%Vor%

In diesem Fall erstellt die Engine ein Volume (siehe Referenz erstellen auf volumes ), was nicht der Fall ist in Ihr Quellverzeichnis eingebunden. Dies war die einfachste Lösung und erforderte von mir keinerlei Symlinking, das Setzen von Pfaden, etc.

Als Referenz sieht meine einfache Dockerfile einfach so aus:

%Vor%

(Das Skript watch ist nur webpack --watch -d )

Ich hoffe, das hilft jemandem und spart Stunden wie für mich!

'*' = Ich konnte webpack nicht von meinen package.json -Skripts aus ausführen und alles installieren, während der Inhalt des Containers den node_modules -Ordner mit dem, was ich gerade installiert habe, erstellt habe (ich lade npm i --save [packages] aus dem Container heraus) Das Paket aktualisiert die package.json bis zur nächsten Neuerstellung.     
agilgur5 13.04.2016 14:00
quelle
1

Die Lösung, mit der ich ging, war, den Ordner node_modules in /dist/node_modules zu platzieren und einen symbolischen Link von /data/node_modules zu erstellen. Ich kann dies sowohl in meiner Dockerfile tun, so wird es es beim Aufbau verwenden, und ich kann meine Symlinks zu meinem git-Repo senden. Alles hat gut geklappt ..

    
xeor 08.11.2014 18:43
quelle
0

Vielleicht können Sie Ihren Container speichern und dann regelmäßig mit einer minimalen Dockerdatei neu erstellen

FROM my_container

und eine .dockerignore-Datei mit

/ data / node_module

Siehe das Dokument Ссылка

    
user2915097 07.11.2014 17:04
quelle

Tags und Links