diff --git a/build/build.go b/build/build.go index d6c9c09580a4..0c34d1ac3270 100644 --- a/build/build.go +++ b/build/build.go @@ -252,17 +252,22 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op attests[k] = *v } } - supportsAttestations := bopts.LLBCaps.Contains(apicaps.CapID("exporter.image.attestations")) && nodeDriver.Features(ctx)[driver.MultiPlatform] + + supportAttestations := bopts.LLBCaps.Contains(apicaps.CapID("exporter.image.attestations")) && nodeDriver.Features(ctx)[driver.MultiPlatform] if len(attests) > 0 { - if !supportsAttestations { - return nil, nil, errors.Errorf("attestations are not supported by the current BuildKit daemon") + if !supportAttestations { + if !nodeDriver.Features(ctx)[driver.MultiPlatform] { + return nil, nil, errors.Errorf(`Attestations are not supported for the %s driver. +Switch to a different driver, or turn on the containerd image store, and try again.`, nodeDriver.Factory().Name()) + } + return nil, nil, errors.Errorf("Attestations are not supported by the current BuildKit daemon") } for k, v := range attests { so.FrontendAttrs["attest:"+k] = v } } - if _, ok := opt.Attests["provenance"]; !ok && supportsAttestations { + if _, ok := opt.Attests["provenance"]; !ok && supportAttestations { const noAttestEnv = "BUILDX_NO_DEFAULT_ATTESTATIONS" var noProv bool if v, ok := os.LookupEnv(noAttestEnv); ok {