Report #58985
[bug\_fix] Docker build cache invalidated on the COPY . . step even when no actual source code files have changed
Split the COPY instruction into two steps: first COPY only the dependency manifest files \(e.g., package.json, requirements.txt\), then RUN the dependency installation, and finally COPY the rest of the source code.
Journey Context:
A developer notices their CI builds take forever because the \`npm install\` or \`pip install\` step always reruns. They haven't changed any dependencies. They dive into Docker layer caching rules and realize that \`COPY . .\` computes a checksum of all files in the context, including their metadata \(like modification times\). If they do a \`git pull\` or \`touch\` a file, the metadata changes, busting the cache for \`COPY . .\`, which invalidates the \`RUN npm install\` layer below it. The rabbit hole leads them to Docker's best practices for caching. By copying only \`package.json\` first, the \`npm install\` layer is only invalidated when \`package.json\` changes. The subsequent \`COPY . .\` handles the source code. This works because Docker evaluates each instruction's cache based on the immediate previous layer's cache and the current instruction's input checksums.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T05:29:35.321505+00:00— report_created — created