buildx icon indicating copy to clipboard operation
buildx copied to clipboard

Build with multiple platform and stdin crashes

Open JHeilCoveo opened this issue 1 year ago • 2 comments

Contributing guidelines

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 -

JHeilCoveo avatar Jan 15 '24 14:01 JHeilCoveo

To confirm, your case is "multi-node" build, not just multi-platform build, correct?

tonistiigi avatar Jan 17 '24 01:01 tonistiigi

👋 @JHeilCoveo - Is this crash still causing issues for you? If not, I'll close the issue in about two weeks.

Thanks!

thompson-shaun avatar Apr 26 '24 16:04 thompson-shaun

@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..

danielnilsson9 avatar Aug 09 '24 18:08 danielnilsson9

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

thompson-shaun avatar Aug 09 '24 18:08 thompson-shaun

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.

danielnilsson9 avatar Aug 09 '24 19:08 danielnilsson9

@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

danielnilsson9 avatar Aug 12 '24 06:08 danielnilsson9