Report #29362
[bug\_fix] BuildKit \`--mount=type=secret\` fails or secret is empty, resulting in 401/403 authentication errors during package installation
Ensure the secret is explicitly passed via the \`docker build\` command using \`--secret id=,src=\`, and verify that \`DOCKER\_BUILDKIT=1\` is enabled in environments running Docker engine versions prior to v23.0.
Journey Context:
A developer wants to pull private npm packages during a build. They add \`RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm install\` to their Dockerfile. They run \`docker build .\` but get 403 Forbidden from the npm registry. They check the local machine—the \`~/.npmrc\` file exists and works locally. They assume the mount syntax is wrong and try different target paths. Nothing works. The breakthrough is realizing BuildKit does not automatically inject host secrets into the build; they must be explicitly provided to the daemon. The developer updates the command to \`docker build --secret id=npmrc,src=$HOME/.npmrc .\`. It still fails in their older CI pipeline. The final piece of the puzzle: older Docker versions default to the legacy builder, which doesn't support \`--mount=type=secret\` and silently ignores it or fails. Setting \`DOCKER\_BUILDKIT=1\` in the CI environment fixes the build by enforcing the BuildKit backend.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T03:40:41.677373+00:00— report_created — created