2017-10-24 3 views
2

auf dem neuesten Stand halten Ich arbeite mit einem Team auf einem Repo in Docker und Knoten gebaut. Wenn jemand anderes Knotenpakete installiert, I git pull diese Änderungen an package.json und package-lock.json.node_module in Docker

Ich kann nicht nur docker-compose build und dann docker-compose up ausführen, um diese neuen Knotenpakete zu installieren. Ich muss zuerst docker-compose down -v. Dies liegt daran, dass wir ein Volume zum Speichern der Knotenmodule verwenden. Wir sind nicht daran gebunden und würden die Module lieber einfach in einer Docker-Bildebene speichern. Wenn wir jedoch das App-Volume binden (- .:/app in docker-compose.yml), wird der Ordner node_modules im Bild schattiert.

Es fühlt sich an, als würden wir den falschen Ansatz wählen, aber das scheint die allgemein akzeptierte Praxis zu sein. Unser Setup basiert auf "Lessons from Building a Node App in Docker"

Unsere Dockerfile:

FROM node:8.4.0 
WORKDIR /app 
COPY package.json package-lock.json ./ 
RUN npm install --loglevel=error --progess=false 
COPY . /app/ 

Unsere docker-compose.yml:

--- 
version: '2.1' 

services: 
    main: 
    build: 
     context: . 
    volumes: 
     - .:/app 
     - /app/node_modules 
    container_name: main 
    command: ['node', 'index.js'] 

Mein Verständnis des Problems ist, dass in der docker-compose.yml Datei Das Volumen - /app/node_modules schafft ein Volume, das kopiert die Knotenmodule aus der Bildschicht in ein Volumen, das heißt, wenn wir die App wieder mit einem anderen bauen package.json, das Bild wird aktualisiert, aber nicht das Volume. down Das Volume zwingt ihn, das aktualisierte Bild node_modules erneut zu kopieren, weshalb das funktioniert. Bitte lassen Sie mich wissen, wenn mein Verständnis ist falsch :)

Wir laufen in AWS ECS, so können wir leider nur Docker Funktionen in 17.03.2-CE (keine mehrstufigen Docker Dateien für jetzt) ​​verwenden.

+0

Mögliche Betrüger von https://stackoverflow.com/questions/43538187/docker-compose-v3-named-volume-node-modules-from-npm-install?rq=1, obwohl es keine Antwort hat –

+0

Auch potenziell verwandt: https://StackOverflow.com/Questions/46916101/keeping-Node-Modules-up-to-Date-in-Docker –

Antwort

0

Sieht aus, als ob Sie den aktuellen Ordner in/app im Container abbilden. Ich würde ./node_modules löschen, wenn es im aktuellen Ordner vorhanden ist, bevor docker-compose ausgeführt wird.

+0

Danke für die Antwort. Wenn ich dies versuche, wird der Ordner node_modules in meinem aktuellen (lokalen) Ordner in der Zeile 'RUN npm install --loglevel = error --progess = false 'erneut erstellt. Müsste ich den Ordner node_modules jedes Mal entfernen? (Oder ist das mit der Dockerdatei möglich?) –

+0

Ich würde versuchen, RUN rm -rf ./node_modules || hinzuzufügen true, bevor RUN npm Befehlszeile installieren. –

+0

Leider hat das nicht funktioniert. Ich denke, weil es den 'node_modules'-Ordner im Bild entfernt, aber das Volume besteht immer noch mit der alten Kopie der Daten vom ersten Mal, als es gebaut wurde. –

Verwandte Themen