Report #67646
[bug\_fix] Dependency installation step \(e.g., npm install, pip install\) runs on every build, taking minutes, even when only source code changed
Split the COPY instruction: copy only dependency manifests \(package.json/package-lock.json or requirements.txt\) first, run the dependency install, then copy the rest of the source code.
Journey Context:
A developer notices their CI pipeline takes 10 minutes on every commit because it reinstalls thousands of dependencies. Their Dockerfile has COPY . . followed by RUN npm install. They assume Docker layer caching is broken or disabled in CI. They spend time configuring BuildKit cache mounts and CI cache export/import, which are complex and still don't solve the core issue. The actual root cause is that COPY . . invalidates whenever ANY file in the project changes \(like a single source code typo\). Because the RUN npm install layer comes after the COPY . . layer, its cache is invalidated and it must re-run. The fix is to copy only the package.json and package-lock.json first, run npm install, and then COPY . . for the remaining source code. This way, source code changes hit the cached dependency installation layer, and only the final copy layer is rebuilt.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T20:01:23.122976+00:00— report_created — created