Contributing guidelines and issue reporting guide
Well-formed report checklist
Description of bug
Bug description
Building a project with a --build-context given with different directory runs the build with an earlier context instead of the one provided.
Reproduction
#!/bin/sh -x
mkdir a b
echo "hello from a" > a/file
#dd if=/dev/urandom of=a/largefile bs=1M count=1
echo "hello from b" > b/file
dd if=/dev/urandom of=b/largefile bs=1M count=1
cat > Dockerfile <<EOF
FROM alpine
RUN --mount=from=context,target=/context <<NUR
cat /context/file
cp /context/file /
NUR
EOF
trap "rm -rf a b Dockerfile" EXIT
ls -laR .
docker buildx build --load --build-context context=a --no-cache -t a .
docker buildx build --load --build-context context=b --no-cache -t b .
docker run --rm a cat /file
docker run --rm b cat /file
Test run output
$ sh -x test.sh
+ mkdir a b
+ echo hello from a
+ echo hello from b
+ dd if=/dev/urandom of=b/largefile bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1,0 MB, 1,0 MiB) copied, 0,00433338 s, 242 MB/s
+ cat
+ trap rm -rf a b Dockerfile EXIT
+ ls -laR .
.:
total 24
drwxrwxr-x 4 kohtala kohtala 4096 tammi 15 18:33 .
drwxrwxr-x 49 kohtala kohtala 4096 tammi 15 17:34 ..
drwxrwxr-x 2 kohtala kohtala 4096 tammi 15 18:33 a
drwxrwxr-x 2 kohtala kohtala 4096 tammi 15 18:33 b
-rw-rw-r-- 1 kohtala kohtala 109 tammi 15 18:33 Dockerfile
-rw-rw-r-- 1 kohtala kohtala 558 tammi 15 18:33 test.sh
./a:
total 12
drwxrwxr-x 2 kohtala kohtala 4096 tammi 15 18:33 .
drwxrwxr-x 4 kohtala kohtala 4096 tammi 15 18:33 ..
-rw-rw-r-- 1 kohtala kohtala 13 tammi 15 18:33 file
./b:
total 1036
drwxrwxr-x 2 kohtala kohtala 4096 tammi 15 18:33 .
drwxrwxr-x 4 kohtala kohtala 4096 tammi 15 18:33 ..
-rw-rw-r-- 1 kohtala kohtala 13 tammi 15 18:33 file
-rw-rw-r-- 1 kohtala kohtala 1048576 tammi 15 18:33 largefile
+ docker buildx build --load --build-context context=a --no-cache -t a .
#0 building with "buildkit-dev" instance using docker-container driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 146B done
#1 DONE 0.0s
#2 [auth] library/alpine:pull token for registry-1.docker.io
#2 DONE 0.0s
#3 [context context] load .dockerignore
#3 transferring _context: 2B done
#3 DONE 0.0s
#4 [internal] load metadata for docker.io/library/alpine:latest
#4 DONE 0.8s
#5 [internal] load .dockerignore
#5 transferring context: 2B done
#5 DONE 0.0s
#6 [context context] load from client
#6 transferring _context: 44B done
#6 DONE 0.0s
#7 [stage-0 1/2] FROM docker.io/library/alpine:latest@sha256:865b95f46d98cf867a156fe4a135ad3fe50d2056aa3f25ed31662dff6da4eb62
#7 resolve docker.io/library/alpine:latest@sha256:865b95f46d98cf867a156fe4a135ad3fe50d2056aa3f25ed31662dff6da4eb62 0.0s done
#7 CACHED
#8 [stage-0 2/2] RUN --mount=from=context,target=/context <<NUR (cat /context/file...)
#8 0.071 hello from a
#8 DONE 0.1s
#9 exporting to oci image format
#9 exporting layers 0.1s done
#9 exporting manifest sha256:1e12f7bddb93dd3f36ef3cef9adb2a2b0ee5fd62c34e70eb92a475cbaa04d999 0.0s done
#9 exporting config sha256:1f33eed3b2e20b39981f097bb58a4ac389387bb7ed68d3aaa50b1abcea5ac4c4 0.0s done
#9 sending tarball
#9 sending tarball 0.3s done
#9 DONE 0.4s
#10 importing to docker
#10 DONE 0.0s
+ docker buildx build --load --build-context context=b --no-cache -t b .
#0 building with "buildkit-dev" instance using docker-container driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 146B done
#1 DONE 0.0s
#2 [context context] load .dockerignore
#2 transferring _context: 2B done
#2 DONE 0.0s
#3 [internal] load metadata for docker.io/library/alpine:latest
#3 DONE 0.2s
#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s
#5 [context context] load from client
#5 transferring _context: 1.05MB 0.0s done
#5 DONE 0.0s
#6 [stage-0 1/2] FROM docker.io/library/alpine:latest@sha256:865b95f46d98cf867a156fe4a135ad3fe50d2056aa3f25ed31662dff6da4eb62
#6 resolve docker.io/library/alpine:latest@sha256:865b95f46d98cf867a156fe4a135ad3fe50d2056aa3f25ed31662dff6da4eb62 0.0s done
#6 CACHED
#7 [stage-0 2/2] RUN --mount=from=context,target=/context <<NUR (cat /context/file...)
#7 0.063 hello from a
#7 DONE 0.1s
#8 exporting to oci image format
#8 exporting layers 0.1s done
#8 exporting manifest sha256:446979d0ea309400583ced6c2e62953795fe4828151dfbf177d9861ffffead3d 0.0s done
#8 exporting config sha256:1ad64adad6e9f3465a9a38932539dd383e96fe14213ae7c8da2d1d2b5ea1af71 0.0s done
#8 sending tarball
#8 sending tarball 0.2s done
#8 DONE 0.4s
#9 importing to docker
#9 DONE 0.0s
+ docker run --rm a cat /file
hello from a
+ docker run --rm b cat /file
hello from a
The correct context seems to be loaded as seen from the size, but the RUN command has wrong context mounted. Adding the largefile in the a directory causes it to mount correct context.
Version information
$ docker buildx inspect
Name: buildkit-dev
Driver: docker-container
Last Activity: 2026-01-15 16:25:17 +0000 UTC
Nodes:
Name: buildkit-dev0
Endpoint: unix:///var/run/docker.sock
Driver Options: image="moby/buildkit:dev"
Status: running
BuildKit daemon flags: --allow-insecure-entitlement=network.host
BuildKit version: faed462
Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
Labels:
org.mobyproject.buildkit.worker.executor: oci
org.mobyproject.buildkit.worker.hostname: 9d1e00c96a4a
org.mobyproject.buildkit.worker.network: host
org.mobyproject.buildkit.worker.oci.process-mode: sandbox
org.mobyproject.buildkit.worker.selinux.enabled: false
org.mobyproject.buildkit.worker.snapshotter: overlayfs
GC Policy rule#0:
All: false
Filters: type==source.local,type==exec.cachemount,type==source.git.checkout
Keep Duration: 48h0m0s
Max Used Space: 488.3MiB
GC Policy rule#1:
All: false
Keep Duration: 1440h0m0s
Reserved Space: 9.313GiB
Max Used Space: 93.13GiB
Min Free Space: 188.1GiB
GC Policy rule#2:
All: false
Reserved Space: 9.313GiB
Max Used Space: 93.13GiB
Min Free Space: 188.1GiB
GC Policy rule#3:
All: true
Reserved Space: 9.313GiB
Max Used Space: 93.13GiB
Min Free Space: 188.1GiB
Contributing guidelines and issue reporting guide
Well-formed report checklist
Description of bug
Bug description
Building a project with a --build-context given with different directory runs the build with an earlier context instead of the one provided.
Reproduction
Test run output
The correct context seems to be loaded as seen from the size, but the RUN command has wrong context mounted. Adding the
largefilein theadirectory causes it to mount correct context.Version information