Skip to content

Bake: Inconsistent build contexts #3670

@codello

Description

@codello

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

docker buildx bake seems to handle additional contexts differently, depending on whether the build context is a remote git context or a local context.

Using the configuration below (or use https://github.com/codello/buildx-bake-test) run the following commands:

# Local Build Context
docker buildx bake --set '*.tags=local/test'
# Git Build Context
docker buildx bake "https://github.com/codello/buildx-bake-test.git" --set '*.tags=remote/test'

# Lists the contents of the additional context
docker run local/test
docker run remote/test

Expected behaviour

# Show results for local context
$ docker run local/test
.
└── file.txt

0 directories, 1 files

# Show results for git context
$ docker run remote/test
.
└── file.txt

0 directories, 1 files

Actual behaviour

# Show results for local context
$ docker run local/test
.
└── file.txt

0 directories, 1 files

# Show results for git context
$ docker run remote/test
.
└── context
    └── file.txt

1 directories, 1 files

Buildx version

github.com/docker/buildx v0.31.1 Homebrew

Docker info

Client: Docker Engine - Community
 Version:    29.2.1
 Context:    colima
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.31.1
    Path:     /opt/homebrew/lib/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  5.0.2
    Path:     /opt/homebrew/lib/docker/cli-plugins/docker-compose

Server:
 Containers: 17
  Running: 4
  Paused: 0
  Stopped: 13
 Images: 38
 Server Version: 28.4.0
 Storage Driver: overlayfs
  driver-type: io.containerd.snapshotter.v1
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 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: runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 05044ec0a9a75232cad458027ca83437aae3f4da
 runc version: v1.2.5-0-g59923ef
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.8.0-64-generic
 Operating System: Ubuntu 24.04.2 LTS
 OSType: linux
 Architecture: aarch64
 CPUs: 2
 Total Memory: 7.738GiB
 Name: colima
 ID: b157a974-1f7c-434c-a4ac-643b0d0ad581
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  ::1/128
  127.0.0.0/8
 Live Restore Enabled: false
 Firewall Backend: iptables

Builders list

NAME/NODE     DRIVER/ENDPOINT   STATUS    BUILDKIT   PLATFORMS
colima*       docker
 \_ colima     \_ colima        running   v0.24.0    linux/arm64
default       docker
 \_ default    \_ default       running   v0.24.0    linux/arm64

Configuration

Directory layout (also currently available at https://github.com/codello/buildx-bake-test)

.
├── build/
│   └── Dockerfile
├── context/
│   └── file.txt (content irrelevant, can be empty)
└── docker-bake.hcl
FROM alpine
WORKDIR /test
COPY --from=context . .
ENTRYPOINT [ "tree" ]
target "default" {
  tags   = ["local/test"]
  output = [{ type = "docker" }]

  contexts = {
    context = "./context/"
  }
  context    = "./build"
  dockerfile = "Dockerfile"
}

Invoked Commands:

# Local Build Context
docker buildx bake --set '*.tags=local/test'
# Git Build Context
docker buildx bake "https://github.com/codello/buildx-bake-test.git" --set '*.tags=remote/test'

# Lists the contents of the additional context
docker run local/test
docker run remote/test

Build logs

$ docker buildx bake --set '*.tags=local/test' --no-cache
[+] Building 1.1s (10/10) FINISHED                                                                                                                        docker:colima
 => [internal] load local bake definitions                                                                                                                         0.0s
 => => reading docker-bake.hcl 180B / 180B                                                                                                                         0.0s
 => [internal] load build definition from Dockerfile                                                                                                               0.0s
 => => transferring dockerfile: 112B                                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                                                   0.8s
 => [context context] load .dockerignore                                                                                                                           0.0s
 => => transferring _context: 2B                                                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                                  0.0s
 => => transferring context: 2B                                                                                                                                    0.0s
 => [stage-0 1/3] FROM docker.io/library/alpine:latest@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659                                     0.0s
 => => resolve docker.io/library/alpine:latest@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659                                             0.0s
 => [context context] load from client                                                                                                                             0.0s
 => => transferring _context: 27B                                                                                                                                  0.0s
 => CACHED [stage-0 2/3] WORKDIR /test                                                                                                                             0.0s
 => [stage-0 3/3] COPY --from=context . .                                                                                                                          0.0s
 => exporting to image                                                                                                                                             0.1s
 => => exporting layers                                                                                                                                            0.0s
 => => exporting manifest sha256:e0c8b415385dbea953b3138efa689285566e1cc755a6f881eead49ce8e1333bf                                                                  0.0s
 => => exporting config sha256:8f1b96ea3473ddd7043d5f830be87c9b1d314a74cc1b0a358f25692dc284549f                                                                    0.0s
 => => exporting attestation manifest sha256:f71d4ad1a739e7fc28ed34114d96c49c870bfcb30dd0e71bb4bb8d80690d111c                                                      0.0s
 => => exporting manifest list sha256:b85a127fb87ce3087ab769883fc0c3f1806a19275df71876c0934f206759e0c4                                                             0.0s
 => => naming to docker.io/local/test:latest                                                                                                                       0.0s
 => => unpacking to docker.io/local/test:latest                                                                                                                    0.0s


$ docker buildx bake "https://github.com/codello/buildx-bake-test.git" --set '*.tags=remote/test' --no-cache
[+] Building 2.1s (8/8) FINISHED                                                                                                                          docker:colima
 => CACHED [internal] load git source https://github.com/codello/buildx-bake-test.git                                                                              1.7s
 => CACHED set context to build                                                                                                                                    0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                                                   0.2s
 => [stage-0 1/3] FROM docker.io/library/alpine:latest@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659                                     0.0s
 => => resolve docker.io/library/alpine:latest@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659                                             0.0s
 => CACHED set context context to ./context/                                                                                                                       0.0s
 => CACHED [stage-0 2/3] WORKDIR /test                                                                                                                             0.0s
 => [stage-0 3/3] COPY --from=context . .                                                                                                                          0.0s
 => exporting to image                                                                                                                                             0.0s
 => => exporting layers                                                                                                                                            0.0s
 => => exporting manifest sha256:63980237cad096ade608a542e3a047d9a7d70a012860a268f8a9e93eabfbe424                                                                  0.0s
 => => exporting config sha256:f5d2e6112e5f7272557872bc4d3cddb58292cc2a68d2ca0815e41bedae16619b                                                                    0.0s
 => => exporting attestation manifest sha256:6809ceb536a33a4d8dae248c5332a6926d60678efe0ea4487013ee7b44614d32                                                      0.0s
 => => exporting manifest list sha256:905bfa269e5d9f2fdb10b15a2a694f5ca3826b6edb20812b9b740734f6ab80f8                                                             0.0s
 => => naming to docker.io/remote/test:latest                                                                                                                      0.0s
 => => unpacking to docker.io/remote/test:latest                                                                                                                   0.0s

Additional info

I have discovered this issue because a build in GitHub Actions couldn't find the expected files in an additional context. The workflow used a git context, so this issue doesn't seem to be related to my local configuration.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions