-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Open
Labels
Description
Contributing guidelines and issue reporting guide
- I've read the contributing guidelines and wholeheartedly agree. I've also read the issue reporting guide.
Well-formed report checklist
- I have found a bug that the documentation does not mention anything about my problem
- I have found a bug that there are no open or closed issues that are related to my problem
- I have provided version/information about my environment and done my best to provide a reproducer
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