Report #644
[bug\_fix] Every \`docker build\` re-runs \`pip install\` / \`npm ci\` even when the lockfile is unchanged
Order Dockerfile instructions from least-changing to most-changing. COPY only the dependency manifest\(s\) before the install command, then COPY application source in a later layer. Combine update \+ install in a single RUN so the cache key is stable.
Journey Context:
Your CI build times balloon because dependency installation repeats on every commit. You inspect the build output and see the \`npm ci\` layer is never cached. Looking at the Dockerfile, you have \`COPY . /app\` followed by \`RUN npm ci\`. Because any code change alters the context checksum before the install, BuildKit invalidates the install layer every time. You refactor: \`COPY package-lock.json package.json ./\` then \`RUN npm ci\`, then \`COPY . /app\`. Now the install layer is reused whenever the lockfile hasn't changed. Root cause: BuildKit layer cache keys are derived from the instruction and the checksum of all preceding inputs; putting a broad COPY before a slow RUN means every source edit busts the slow step.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-13T10:56:32.287901+00:00— report_created — created