Skip to content

Docker Buildx Bake Secret Mounting Fails During Multi-Platform Context Build #3543

Description

@f1code

Contributing guidelines

I've found a bug and checked that ...

  • ... the documentation does not mention anything about my problem
  • ... there are no open or closed issues that are related to my problem

Description

When using docker buildx bake to build a multi-platform image (e.g., linux/amd64, linux/arm64) where one build target (Build A) uses another target (Build B) as a context, the secret defined and mounted in Build B fails for one of the target platforms. This failure only occurs during simultaneous multi-platform builds. The single-platform build works correctly for all targeted architectures.

Steps to Reproduce

Define a multi-platform build using docker buildx bake (e.g., in a docker-bake.json file).
On one of the target, add a "contexts" key that references the other target.
In the referenced target, add a "secret" key, and mount that secret in the Dockerfile.
Execute the build:

docker buildx bake -f docker-bake.json

Expected behaviour

Both linux/amd64 and linux/arm64 builds for Build "B" should successfully mount and access the secret, and consequently, Build "A" should complete successfully for both platforms.

Actual behaviour

The build fails:

 => ERROR [fe-builder linux/arm64 fe-builder 3/3] RUN --mount=type=secret,id=npmrc,target=/root/.npmrc cat /root/.npmrc                                                                                                                                                 0.3s
 => CANCELED [static linux/amd64 fe_builder_stage 1/3] WORKDIR /app/build/dist                                                                                                                                                                                          0.0s
------
 > [fe-builder linux/arm64 fe-builder 3/3] RUN --mount=type=secret,id=npmrc,target=/root/.npmrc cat /root/.npmrc:
0.204 cat: can't open '/root/.npmrc': No such file or directory
------
Dockerfile:5
--------------------
   3 |     WORKDIR /src
   4 |     
   5 | >>> RUN --mount=type=secret,id=npmrc,target=/root/.npmrc cat /root/.npmrc
   6 |     
--------------------
ERROR: target static: failed to solve: process "/bin/sh -c cat /root/.npmrc" did not complete successfully: exit code: 1

However if I execute the build for a single platform, the build succeeds (no matter which platform):

docker buildx bake -f bake.txt --no-cache --set "*.platform=linux/amd64"

Buildx version

github.com/docker/buildx v0.30.0 124418c

Docker info

Client: Docker Engine - Community
 Version:    29.0.4
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.30.0
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.40.3
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 24
 Server Version: 29.0.4
 Storage Driver: overlayfs
  driver-type: io.containerd.snapshotter.v1
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 CDI spec directories:
  /etc/cdi
  /var/run/cdi
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: fcd43222d6b07379a4be9786bda52438f0dd16a1
 runc version: v1.3.3-0-gd842d771
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.14.0-1017-aws
 Operating System: Ubuntu 24.04.3 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 15.25GiB
 Name: ip-172-31-65-156
 ID: 13575828-7bd5-4daf-91b7-56df4cca811a
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  ::1/128
  127.0.0.0/8
 Registry Mirrors:
  https://dh-cache.4gclinical.com/
 Live Restore Enabled: false
 Firewall Backend: iptables

Builders list

NAME/NODE     DRIVER/ENDPOINT   STATUS    BUILDKIT   PLATFORMS
default*      docker                                 
 \_ default    \_ default       running   v0.25.2    linux/amd64 (+4), linux/arm64, linux/arm (+2), linux/ppc64le, (6 more)

Configuration

Dockerfile:

FROM node:22-alpine AS fe-builder

WORKDIR /src

RUN --mount=type=secret,id=npmrc,target=/root/.npmrc cat /root/.npmrc

Dockerfile.static:

FROM fe-builder-image AS fe_builder_stage

WORKDIR /app/build/dist
RUN touch foo

FROM nginx:1.27-alpine

WORKDIR /app

# Copy frontend static files from previous stage
COPY --from=fe_builder_stage /app/build/dist/ /app/dist/

CMD ["nginx", "-g", "daemon off;"]

docker-bake.json:

{
  "group": {
    "default": {
      "targets": [
        "fe-builder",
"static"
      ]
    }
  },
  "target": {
    "fe-builder": {
      "context": ".",
      "dockerfile": "./Dockerfile",
      "secret": [
        {
          "id": "npmrc",
          "src": "./npmrc.context"
        }
      ],
      "platforms": [
        "linux/amd64",
        "linux/arm64"
      ]
    },
    "static": {
      "context": ".",
      "contexts": {
        "fe-builder-image": "target:fe-builder"
      },
      "dockerfile": "./Dockerfile.static",
      "platforms": [
        "linux/amd64",
        "linux/arm64"
      ]
    }
  }
}

Command:

docker buildx bake -f docker-bake.json

Build logs

#0 building with "default" instance using docker driver

#1 [internal] load local bake definitions
#1 reading bake.txt 651B / 651B done
#1 DONE 0.0s

#2 [fe-builder internal] load build definition from Dockerfile
#2 transferring dockerfile: 206B done
#2 DONE 0.0s

#3 [fe-builder linux/amd64 internal] load metadata for 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine
#3 DONE 0.0s

#4 [fe-builder linux/arm64 internal] load metadata for 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine
#4 DONE 0.0s

#5 [fe-builder internal] load .dockerignore
#5 transferring context: 2B done
#5 DONE 0.0s

#6 [static internal] load build definition from Dockerfile.static
#6 transferring dockerfile: 533B done
#6 DONE 0.0s

#7 [static linux/arm64 internal] load metadata for 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.dev.nginx:1.27-alpine
#7 DONE 0.0s

#8 [static linux/amd64 internal] load metadata for 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.dev.nginx:1.27-alpine
#8 DONE 0.0s

#9 [static internal] load .dockerignore
#9 transferring context: 310B done
#9 DONE 0.0s

#10 [static linux/amd64 fe-builder 1/3] FROM 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine@sha256:ab24e34a81dd2c4744f4ed933d61a930bfd72e9f92971e1c0ef16c558ff8dcdc
#10 resolve 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine@sha256:ab24e34a81dd2c4744f4ed933d61a930bfd72e9f92971e1c0ef16c558ff8dcdc 0.0s done
#10 resolve 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine@sha256:ab24e34a81dd2c4744f4ed933d61a930bfd72e9f92971e1c0ef16c558ff8dcdc 0.0s done
#10 DONE 0.1s

#11 [static linux/arm64 fe-builder 1/3] FROM 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine@sha256:ab24e34a81dd2c4744f4ed933d61a930bfd72e9f92971e1c0ef16c558ff8dcdc
#11 resolve 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine@sha256:ab24e34a81dd2c4744f4ed933d61a930bfd72e9f92971e1c0ef16c558ff8dcdc 0.0s done
#11 DONE 0.1s

#12 [static linux/arm64 stage-1 1/3] FROM 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.dev.nginx:1.27-alpine@sha256:3289667d2aa29a5a4061d944c5ec280eb876026756f42c4f4f970168b44fa8b2
#12 resolve 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.dev.nginx:1.27-alpine@sha256:3289667d2aa29a5a4061d944c5ec280eb876026756f42c4f4f970168b44fa8b2 0.0s done
#12 DONE 0.1s

#13 [static linux/arm64 fe-builder 2/3] WORKDIR /src
#13 CACHED

#14 [static linux/arm64 stage-1 2/3] WORKDIR /app
#14 CACHED

#15 [static linux/amd64 stage-1 1/3] FROM 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.dev.nginx:1.27-alpine@sha256:3289667d2aa29a5a4061d944c5ec280eb876026756f42c4f4f970168b44fa8b2
#15 resolve 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.dev.nginx:1.27-alpine@sha256:3289667d2aa29a5a4061d944c5ec280eb876026756f42c4f4f970168b44fa8b2 0.0s done
#15 DONE 0.1s

#16 [static linux/amd64 stage-1 2/3] WORKDIR /app
#16 CACHED

#17 [fe-builder linux/amd64 fe-builder 2/3] WORKDIR /src
#17 CACHED

#18 [static linux/amd64 fe-builder 3/3] RUN --mount=type=secret,id=npmrc,target=/root/.npmrc cat /root/.npmrc
#18 0.155 foo
#18 DONE 0.2s

#11 [fe-builder linux/arm64 fe-builder 1/3] FROM 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine@sha256:ab24e34a81dd2c4744f4ed933d61a930bfd72e9f92971e1c0ef16c558ff8dcdc
#11 resolve 798191538308.dkr.ecr.us-east-1.amazonaws.com/4g.node:22-alpine@sha256:ab24e34a81dd2c4744f4ed933d61a930bfd72e9f92971e1c0ef16c558ff8dcdc 0.0s done
#11 DONE 0.1s

#13 [fe-builder linux/arm64 fe-builder 2/3] WORKDIR /src
#13 CACHED

#19 [static linux/amd64 fe_builder_stage 1/3] WORKDIR /app/build/dist
#19 DONE 0.0s

#20 [fe-builder linux/arm64 fe-builder 3/3] RUN --mount=type=secret,id=npmrc,target=/root/.npmrc cat /root/.npmrc
#20 0.247 cat: can't open '/root/.npmrc': No such file or directory
#20 ERROR: process "/bin/sh -c cat /root/.npmrc" did not complete successfully: exit code: 1
------
 > [fe-builder linux/arm64 fe-builder 3/3] RUN --mount=type=secret,id=npmrc,target=/root/.npmrc cat /root/.npmrc:
0.247 cat: can't open '/root/.npmrc': No such file or directory
------
Dockerfile:5
--------------------
   3 |     WORKDIR /src
   4 |     
   5 | >>> RUN --mount=type=secret,id=npmrc,target=/root/.npmrc cat /root/.npmrc
   6 |     
--------------------
ERROR: target static: failed to solve: process "/bin/sh -c cat /root/.npmrc" did not complete successfully: exit code: 1

Additional info

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions