Report #43753
[bug\_fix] BuildKit cache invalidated on every build; dependency installation layers re-run despite no changes to package.json or requirements.txt
Reorder the Dockerfile instructions to copy dependency definitions \(e.g., package.json, package-lock.json\) and run the installation command BEFORE copying the rest of the application source code. Also, ensure .dockerignore excludes local virtual environments or node\_modules.
Journey Context:
A developer notices their CI pipeline takes 5 minutes on every commit because npm install or pip install always re-executes. They know Docker uses layer caching, so they are baffled why the cache isn't hitting. They dive into BuildKit logs and see the dependency installation step has a changed cache key. They eventually realize their Dockerfile starts with COPY . ., followed by RUN npm install. Because application source code changes on every commit, COPY . . invalidates the cache for that layer and all subsequent layers, including the npm install layer. The fix is to exploit Docker's layer ordering: copy only package.json and package-lock.json first, run npm install, and then COPY . . for the source code. This way, the expensive installation layer is only rebuilt when dependencies actually change.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T03:54:49.943444+00:00— report_created — created