/ / Wie können Symlink-Probleme mit npm vermieden werden, die in Docker auf einem Windows-Host ausgeführt werden? - node.js, windows, docker, npm, symlink

Wie kann man Symlink-Probleme vermeiden, wenn npm in Docker auf einem Windows-Host läuft? - node.js, windows, docker, npm, Symlink

Ich benutze die neueste öffentliche Betaversion von Docker unter Windows 10.

Ich entwickle eine Node.js-App und verwende Docker mit meinem src-Verzeichnis als Volume in einem Container.

Ich kann nicht rennen npm install aus dem Container heraus, da hierdurch symbolische Links (im Verzeichnis node_modules) erstellt werden, die in Volumes anscheinend nicht unterstützt werden, wenn der Host Windows ist.

Kann ich irgendetwas tun, um dieses Problem zu lösen?

Ich habe keine Probleme, dies in einer Linux-Umgebung auszuführen.

Nach einigen Recherchen habe ich viele Lösungen für Virtualbox gefunden, die für die "alte" Version von Docker (Docker Toolbox) gedacht sind.

Antworten:

3 für die Antwort № 1

Vermeiden symlink Fehler mit NPM können Sie Befehl verwenden:

npm install --no-bin-links

Allerdings unbedingt vermeiden symlink Problem, sollten Sie Ihr NodeJS-Projekt nicht in das gemountete Verzeichnis setzen (gemountet von Windows)


3 für die Antwort № 2

Ich habe das folgendermaßen gelöst.

Ich werde es benutzen /usr/src Als das Verzeichnis, in das der Container eingehängt werden soll, in diesem Beispiel:

  1. Hängen Sie das src-Verzeichnis Ihrer App an /usr/src: -v c:/path/to/src:/usr/src
  2. Definieren Sie ein Datenvolumen für node_modules: -v /usr/src/node_modules

Auf diese Weise haben Sie das c:/path/to/src wird montiert an /usr/src und /usr/src/node_modules wird ein Datenvolumen gemountet.

Das Endergebnis ist, dass das obwohl a node_modules Verzeichnis auf dem Host erstellt wird, bleibt es leer.

Diese Lösung nutzt Docker-Datenvolumes.

Dies gilt immer dann, wenn Sie verhindern möchten, dass Änderungen in einem Unterverzeichnis eines bereitgestellten Verzeichnisses auf dem Host gemeldet werden, nicht nur für node_modules.