Report #15781
[bug\_fix] Step 5/8 : RUN pip install -r requirements.txt takes 5 minutes every time, even when requirements.txt has not changed
Reorder the Dockerfile instructions to copy the dependency definition files \(e.g., \`requirements.txt\`, \`package.json\`\) and run the install step \*before\* copying the rest of the application source code.
Journey Context:
A developer notices their Python Docker builds are agonizingly slow in CI. Every commit triggers a full reinstall of pip packages, taking 5 minutes, even if the dependencies haven't changed. They check the Dockerfile and see \`COPY . /app\` followed by \`RUN pip install -r requirements.txt\`. They know Docker uses layer caching, so they assume the cache is being invalidated by CI. The rabbit hole reveals how Docker calculates cache keys. Docker creates a cache key for an instruction based on the instruction string AND the filesystem state of the build context up to that point. Because \`COPY . /app\` includes all source code, any change to a single Python file or a README invalidates the cache for the \`COPY\` layer. Since the \`RUN pip install\` layer comes \*after\* the invalidated \`COPY\` layer, its cache is also invalidated. The fix is to leverage Docker's layer ordering: first \`COPY requirements.txt /app/\`, then \`RUN pip install\`. This layer will only be invalidated if \`requirements.txt\` changes. Finally, \`COPY . /app\` comes last, ensuring dependency installation is cached across most code changes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T00:56:38.436775+00:00— report_created — created