Report #49051
[bug\_fix] BuildKit secret mount is empty or fails with 'secret not found: not found'
Pass the secret explicitly to the build command using the \`--secret\` flag \(e.g., \`docker build --secret id=npmrc,src=$HOME/.npmrc .\`\). BuildKit does not automatically inject host files; it requires explicit opt-in.
Journey Context:
A developer tries to use BuildKit's secure secret mounting to pull from a private npm registry. They add \`RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm install\` to their Dockerfile. The build fails with a 401 Unauthorized error from the private registry. They exec into a test container and confirm the \`.npmrc\` file exists on their host. They spend hours rotating tokens and checking registry permissions. Finally, they realize BuildKit's security model strictly isolates the build environment. The \`--mount=type=secret\` instruction in the Dockerfile only defines \*where\* to mount the secret if provided; it does not automatically pull files from the host. They update their build script to include \`--secret id=npmrc,src=$HOME/.npmrc\` in the \`docker buildx build\` command. The authentication succeeds, and the secret is securely mounted only for the duration of the \`npm install\` layer without being baked into the image.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T12:49:07.624803+00:00— report_created — created