From e2986f44672dfa75e2c95d79cd051b7af1c11eee Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 22 Sep 2020 15:46:41 +0200 Subject: [PATCH] build: print error if BuildKit/non-BuildKit-specific flags are used With this patch, the `--progress`, `--secret`, `--ssh`, and `--output` flags trigger an error when trying to use without BuildKit enabled; DOCKER_BUILDKIT=0 docker build --progress=plain . --progress is only supported with BuildKit enabled. Enable BuildKit with DOCKER_BUILDKIT=1 DOCKER_BUILDKIT=0 docker build --output=foo . --output is only supported with BuildKit enabled. Enable BuildKit with DOCKER_BUILDKIT=1 Likewise, options that are not supported yet by BuildKit, now trigger an error: DOCKER_BUILDKIT=1 docker build --memory=500M . --memory is not supported with BuildKit enabled. Disable BuildKit with DOCKER_BUILDKIT=0 Signed-off-by: Sebastiaan van Stijn --- cmd/docker/docker.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cmd/docker/docker.go b/cmd/docker/docker.go index 90945f0c47..805b738d07 100644 --- a/cmd/docker/docker.go +++ b/cmd/docker/docker.go @@ -424,7 +424,16 @@ func areFlagsSupported(cmd *cobra.Command, details versionDetails) error { if _, ok := f.Annotations["experimental"]; ok && !details.ServerInfo().HasExperimental { errs = append(errs, fmt.Sprintf(`"--%s" is only supported on a Docker daemon with experimental features enabled`, f.Name)) } - // buildkit-specific flags are noop when buildkit is not enabled, so we do not add an error in that case + if _, ok := f.Annotations["buildkit"]; ok { + if v, _ := command.BuildKitEnabled(details.ServerInfo()); !v { + errs = append(errs, fmt.Sprintf(`"--%s" is only supported with BuildKit enabled. Enable BuildKit with DOCKER_BUILDKIT=1`, f.Name)) + } + } + if _, ok := f.Annotations["no-buildkit"]; ok { + if v, _ := command.BuildKitEnabled(details.ServerInfo()); v { + errs = append(errs, fmt.Sprintf(`"--%s" is not supported with BuildKit enabled. Disable BuildKit with DOCKER_BUILDKIT=0`, f.Name)) + } + } }) if len(errs) > 0 { return errors.New(strings.Join(errs, "\n"))