Report #11296
[bug\_fix] Docker build layer cache invalidated on every code change
Reorder the Dockerfile instructions: copy only dependency manifests \(e.g., \`package.json\`, \`requirements.txt\`\) first, run the dependency installation step, and then \`COPY\` the rest of the source code.
Journey Context:
A developer notices their CI builds take 15 minutes because dependencies are re-downloaded every time. They check the logs and see \`RUN npm install\` never uses the cache. They assume Docker's caching system is broken or the CI daemon is misconfigured. They try adding \`--no-cache\` locally to 'reset' things, but it still fails to cache on subsequent runs. The rabbit hole leads them to understand Docker's layer ordering. Their Dockerfile has \`COPY . .\` immediately followed by \`RUN npm install\`. Since \*any\* file change \(like a README typo\) alters the checksum of the \`COPY . .\` layer, Docker invalidates all subsequent layers, including the slow install step. The fix is to split the copy: \`COPY package.json package-lock.json ./\` then \`RUN npm install\`, then \`COPY . .\`. Now, the expensive install layer is only invalidated when the lockfile changes, restoring the cache hit.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T12:55:21.688569+00:00— report_created — created