Report #45015
[bug\_fix] RUN npm install \(or pip install\) cache is invalidated and re-runs on every single build, even if dependencies did not change.
Reorder the Dockerfile to copy dependency manifests \(package.json/package-lock.json or requirements.txt\) and run the install step BEFORE copying the rest of the application source code \(\`COPY . .\`\).
Journey Context:
A developer notices their Docker builds take 5 minutes every time because the dependency installation step never uses the cache. They assume BuildKit cache is broken or the registry cache isn't working. They try \`--no-cache=false\` and different base images. The real issue is the order of operations in the Dockerfile. They have \`COPY . .\` followed by \`RUN npm install\`. Since source code changes on nearly every commit, the \`COPY . .\` layer hash changes, which invalidates the cache for all subsequent layers, including the dependency installation. The fix is to separate the copy: copy only the lockfiles first, run the install, and then copy the source code. This way, the expensive install step is only re-run when the lockfiles change.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T06:01:29.155949+00:00— report_created — created