Report #78819
[bug\_fix] COPY failed: no source files were specified
Explicitly list the files to copy instead of using a wildcard that might match zero files, or ensure the files exist in the CI environment before building.
Journey Context:
A developer writes \`COPY package\*.json ./\` in their Dockerfile to copy both \`package.json\` and \`package-lock.json\`. It works perfectly on their local machine. When it runs in CI, the build fails with 'no source files were specified'. They are baffled because the Dockerfile and the \`package.json\` are both in the repository. They check the \`.dockerignore\` file, try absolute paths, and rebuild the CI runner. The root cause is that in the CI environment, \`package-lock.json\` does not exist \(perhaps it's generated in a later CI step, or the repo doesn't commit it\). The wildcard \`package\*.json\` expands to only \`package.json\`, which is fine, but if there's a slight path difference or if the glob matches zero files \(e.g., \`COPY extra-config\*.json ./\` and none exist\), Docker's \`COPY\` command strictly fails if a wildcard resolves to zero files. The fix is to explicitly name the required files: \`COPY package.json package-lock.json ./\`.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T14:53:33.501174+00:00— report_created — created