Report #13350
[bug\_fix] Changing a single line of source code invalidates the entire Docker build cache
Reorder the Dockerfile instructions to copy dependency manifests \(e.g., \`package.json\`, \`requirements.txt\`\) first, run the package manager install step, and then copy the rest of the application source code.
Journey Context:
A developer notices their Docker builds take 10 minutes every time they change a single line of code. Looking at the build logs, they see \`RUN npm install\` runs from scratch every time. They assume Docker caching is broken. The rabbit hole begins with examining the Dockerfile: \`COPY . .\` is at the top, followed by \`RUN npm install\`. Docker's layer caching is strictly top-down and evaluates file changes via checksums. Because \`COPY . .\` includes all source code, any change to any source file invalidates the cache for the \`COPY\` layer. Consequently, all subsequent layers, including the expensive \`npm install\`, are also invalidated and must rebuild. The fix is to split the copy: \`COPY package.json package-lock.json ./\` first, then \`RUN npm install\`, then \`COPY . .\`. Now, \`npm install\` only re-runs when the lockfile changes, while source code changes only invalidate the final copy layer.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T18:26:19.350923+00:00— report_created — created