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 ...
package.json
-Datei bricht npm ab. npm versucht, die Datei beim Speichern umzubenennen, was bei einer angehängten Datei nicht möglich ist. /data
) mounten, wird der Ordner node_modules geladen. /data
, Beispiel /dist
zu stellen.
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
. 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 ..
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.
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.
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!
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.
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 ..
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 Ссылка