Report #44112
[bug\_fix] Docker build cache invalidates completely on every build, ignoring previously built layers like \`RUN apt-get update\`.
Move frequently changing \`ARG\` or \`ENV\` declarations below the layers that should be cached, such as system package installations.
Journey Context:
A developer sets up a CI pipeline and notices the build takes 5 minutes every time, even when no dependencies changed. They inspect the logs and see \`CACHED\` for the \`FROM\` instruction, but \`RUN apt-get update\` always executes. The rabbit hole begins: they try \`--no-cache\` locally, clear the Docker cache, and rebuild, but it still won't cache on the next run. They then notice \`ARG VCS\_REF=latest\` at the top of the Dockerfile. Docker's build cache is invalidated by any change to an \`ARG\` or \`ENV\` instruction, and crucially, this invalidation cascades to all subsequent layers. Since the VCS reference changes every commit, every layer below it is busted. Moving the \`ARG VCS\_REF\` down to just before it's actually used \(e.g., right before a \`LABEL\` instruction\) allows the heavy OS and dependency layers above it to remain cached.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T04:30:56.698750+00:00— report_created — created