buildx
buildx copied to clipboard
Build with multiple platform and stdin crashes
Contributing guidelines
- [X] I've read the contributing guidelines and wholeheartedly agree
I've found a bug and checked that ...
- [X] ... the documentation does not mention anything about my problem
- [X] ... there are no open or closed issues that are related to my problem
Description
When using stdin - and multiple platforms it crashes with the following error failed to solve: failed to read dockerfile: no local sources enabled.
Expected behaviour
Not to crash
Actual behaviour
Crash with following error:
[+] Building 0.4s (3/3) FINISHED kubernetes:buildx-jheil
=> [internal] load build definition from Dockerfile 0.3s
=> => transferring dockerfile: 50B 0.3s
=> ERROR [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 0.3s
=> CANCELED [internal] load .dockerignore 0.0s
=> => transferring context: 0.0s
------
> [internal] load build definition from Dockerfile:
------
ERROR: failed to solve: failed to read dockerfile: no local sources enable
Buildx version
github.com/docker/buildx v0.12.1 30feaa1a915b869ebc2eea6328624b49facd4bfb
Docker info
Builders list
buildx-jheil kubernetes
buildx-jheil-amd64 kubernetes:///buildx-jheil?deployment=buildx-jheil-amd64&kubeconfig=%2Fhome%2Fjheil%2F.config%2Fdeployment_pipeline%2Fbuildx-jheil%2Fkubeconfig.yaml running v0.12.4 linux/amd64*, linux/amd64/v2, linux/amd64/v3, linux/386
buildx-jheil-arm64 kubernetes:///buildx-jheil?deployment=buildx-jheil-arm64&kubeconfig=%2Fhome%2Fjheil%2F.config%2Fdeployment_pipeline%2Fbuildx-jheil%2Fkubeconfig.yaml running v0.12.4 linux/arm64*, linux/arm/v7, linux/arm/v6
Configuration
FROM scratch
Build logs
[+] Building 0.4s (3/3) FINISHED kubernetes:buildx-jheil
=> [internal] load build definition from Dockerfile 0.3s
=> => transferring dockerfile: 50B 0.3s
=> ERROR [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 0.3s
=> CANCELED [internal] load .dockerignore 0.0s
=> => transferring context: 0.0s
------
> [internal] load build definition from Dockerfile:
------
ERROR: failed to solve: failed to read dockerfile: no local sources enable
Additional info
Minimal reproduction
echo 'FROM scratch' | docker buildx --builder buildx-jheil build --platform linux/amd64,linux/arm64 --load -
To confirm, your case is "multi-node" build, not just multi-platform build, correct?
👋 @JHeilCoveo - Is this crash still causing issues for you? If not, I'll close the issue in about two weeks.
Thanks!
@thompson-shaun
I have a similar issue when passing build context (tar.gz archive) via STDIN to a multi node multi platform build. Problem does not occur on a single node emulated multi platform build.
I suspect that the issue might be that the STDIN io stream is read multiple times in this case but I have not been able to trace it fully in the code as I'm unfamiliar with the code base and language.
But here https://github.com/docker/buildx/blob/38a8261f051a7b3ee5012ecf3153143551d4f1fd/build/opt.go#L395
the STDIN io.Reader is attached on the session and I believe the parent function (toSolveOpt) is called multiple times for a multi node build which leads me to suspect multiple reads might happen on the STDIN io.Reader somewhere?
As for Dockerfile via STDIN, multiple reads will definitely occur here: https://github.com/docker/buildx/blob/38a8261f051a7b3ee5012ecf3153143551d4f1fd/build/opt.go#L445
If my suspicion is right..
Thank you for the additional context @danielnilsson9! Just a couple of additional context questions:
- What version of Buildx is this occurring in?
docker buildx version - Could you list your bulders?
docker buildx ls
I will post the exact output when I have access to the system again on Monday but I was using standalone buildx binary v15.1 with kubernetes driver with two nodes:
- linux/amd64
- linux/arm64
Additional context: We are using devspace to drive our container builds and this tool will package the build context to a tar.gz and pass to buildx using STDIN so currently there is no way to do multi node multi platform builds with devspace.
@thompson-shaun I upgraded to latest version, issue still exist.
buildx version
github.com/docker/buildx v0.16.2 99dea6dacacc3d604788953088560b9880550570
buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
cicd-buildkitd-march* kubernetes
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-amd64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-amd64&kubeconfig= running v0.15.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
\_ buildkit-arm64 \_ kubernetes:///cicd-buildkitd-march?deployment=buildkit-arm64&kubeconfig= running v0.15.1 linux/arm64, linux/arm/v7, linux/arm/v6
default error