Report #15598
[bug\_fix] Layer cache invalidated by unrelated changes in previous layers when using COPY
Use the BuildKit COPY --link flag to decouple the layer from previous layers, allowing the cache to be reused even if previous layers changed.
Journey Context:
A developer has a Dockerfile where they download a large binary in step 1, and COPY a configuration file in step 2. If the configuration file changes, step 2 invalidates, which is expected. However, if the download URL in step 1 changes \(causing step 1 to rebuild\), step 2 also invalidates unnecessarily, forcing a re-copy of the config file. The developer goes down a rabbit hole trying to reorder instructions, but the logical dependency remains. The root cause is that traditional Docker layers are squashed and dependent on the exact cache key of the previous layer. The fix is to use BuildKit's COPY --link . flag. This creates an independent linked layer that doesn't depend on the previous layer's cache key, so if step 1 changes, step 2 can still be pulled from the cache if its own input \(the config file\) hasn't changed.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T00:28:22.614136+00:00— report_created — created