2016-09-06 1 views
0

Ich habe einen NodeJS Behälter mit den folgenden DockerfileAlle Knotenmodule in package.json werden nach Kleingeld erneut heruntergeladen

FROM node:6 

COPY package.json /tmp/package.json 

RUN npm config set registry http://registry.npmjs.org/ 
RUN cd /tmp && npm install 
RUN mkdir -p /app && cp -a /tmp/node_modules /app/ 

WORKDIR /app 

CMD npm run dev 

EXPOSE 80 

Die Knotenmodule sind nicht wenn package.json neu installiert wird, nicht geändert wann immer ich docker-compose build laufen, was gut ist. Wenn ich jedoch eine weitere Abhängigkeit zu package.json hinzufüge, scheint es, dass alle meine Abhängigkeiten wieder von NPM heruntergeladen werden, was viel Zeit verschwendet. Ist dieses Verhalten beabsichtigt?

Antwort

3

Dies ist das Design des Layer-Caching. Wenn Sie denselben Befehl mit den gleichen Eingaben wie zuvor ausführen, findet Docker eine Ebene, in der Sie mit demselben übergeordneten Element gestartet haben und denselben Befehl ausgeführt haben, und kann diese Ebene wiederverwenden. Wenn sich Ihre Eingabe ändert (weil der COPY-Befehl seine Eingabe ändert), wird der Cache ungültig und es wird wieder auf einen neuen Knoten gebaut: 6 image. Von diesem Bild sind keine Ihrer zuvor heruntergeladenen Dateien verfügbar.

Verwandte Themen