diff --git a/build/build.go b/build/build.go index e10efa93e54..72dd268fc0a 100644 --- a/build/build.go +++ b/build/build.go @@ -290,7 +290,9 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op opt.Exports = []client.ExportEntry{{Type: "image", Attrs: map[string]string{}}} } default: - return nil, nil, errors.Errorf("multiple outputs currently unsupported") + if err := bopts.LLBCaps.Supports(pb.CapMultipleExporters); err != nil { + return nil, nil, errors.Errorf("multiple outputs currently unsupported by the current BuildKit daemon, please upgrade to version v0.13+ or use a single output") + } } // fill in image exporter names from tags diff --git a/controller/pb/export.go b/controller/pb/export.go index 93392a43244..3de33eb3fe4 100644 --- a/controller/pb/export.go +++ b/controller/pb/export.go @@ -15,6 +15,7 @@ func CreateExports(entries []*ExportEntry) ([]client.ExportEntry, error) { if len(entries) == 0 { return nil, nil } + var stdoutUsed bool for _, entry := range entries { if entry.Type == "" { return nil, errors.Errorf("type is required for output") @@ -68,10 +69,14 @@ func CreateExports(entries []*ExportEntry) ([]client.ExportEntry, error) { entry.Destination = "-" } if entry.Destination == "-" { + if stdoutUsed { + return nil, errors.Errorf("multiple outputs configured to write to stdout") + } if _, err := console.ConsoleFromFile(os.Stdout); err == nil { return nil, errors.Errorf("dest file is required for %s exporter. refusing to write to console", out.Type) } out.Output = wrapWriteCloser(os.Stdout) + stdoutUsed = true } else if entry.Destination != "" { fi, err := os.Stat(entry.Destination) if err != nil && !os.IsNotExist(err) { diff --git a/docs/reference/buildx_build.md b/docs/reference/buildx_build.md index 2efe35ea8ef..e2cfdfa734d 100644 --- a/docs/reference/buildx_build.md +++ b/docs/reference/buildx_build.md @@ -424,6 +424,10 @@ $ docker buildx build -o type=docker,dest=- . > myimage.tar $ docker buildx build -t tonistiigi/foo -o type=registry ``` +> **Note ** +> +> Since BuildKit v0.13.0 multiple outputs can be specified by repeating the flag. + Supported exported types are: #### `local`