Report #53495
[bug\_fix] Build cache is invalidated on the dependency installation step \(e.g., \`RUN npm install\` or \`RUN pip install\`\) even when dependencies haven't changed.
Reorder the Dockerfile to copy only the dependency manifest files \(e.g., \`package.json\`, \`package-lock.json\`, \`requirements.txt\`\) before running the install command, and copy the rest of the source code afterward.
Journey Context:
A developer notices their CI pipeline takes 10 minutes on every commit because it reinstalls dependencies from scratch. They check the Docker build logs and see \`CACHED\` for early steps, but \`RUN npm install\` always executes. They initially suspect Docker's cache is corrupted and try \`--no-cache\`, but that doesn't fix the recurring issue. They review the Dockerfile and see \`COPY . .\` followed by \`RUN npm install\`. They realize that \`COPY . .\` copies all source code, which changes on every commit. Since \`RUN npm install\` comes after \`COPY . .\`, any change in the source code invalidates the cache for the install step. By splitting the copy into \`COPY package.json package-lock.json ./\` then \`RUN npm install\` then \`COPY . .\`, the expensive install step is only re-run when the lockfiles change. This works because Docker builds cache layer-by-layer, and a layer is invalidated if any preceding layer has changed.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T20:17:20.986289+00:00— report_created — created