Report #3290
[bug\_fix] Every small code change forces a full re-installation of dependencies, destroying layer cache
Copy only dependency definition files \(package.json, requirements.txt\) and run the package installer \*before\* copying the rest of the source code \(\`COPY . .\`\).
Journey Context:
A developer notices their CI pipeline takes 15 minutes on every commit because \`npm install\` always runs. Their Dockerfile has \`COPY . .\` followed by \`RUN npm install\`. They assume Docker caching is broken in their CI environment and try adding \`--no-cache\` or messing with BuildKit cache mounts. The real issue is the order of operations: Docker calculates the cache hash for a layer based on the instructions and the filesystem state of the previous layer. Because \`COPY . .\` includes all source code, its hash changes on every single code commit. Since \`RUN npm install\` comes after \`COPY . .\`, its cache is automatically invalidated. The fix is to \`COPY package.json package-lock.json ./\` first, run \`RUN npm install\`, and then \`COPY . .\`. This way, the expensive install layer is only invalidated when the dependency files change.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T16:19:20.072424+00:00— report_created — created