diff --git a/cli/command/container/opts_test.go b/cli/command/container/opts_test.go index 460c74fad06f..82ce73bd67cd 100644 --- a/cli/command/container/opts_test.go +++ b/cli/command/container/opts_test.go @@ -714,6 +714,10 @@ func TestParseRestartPolicy(t *testing.T) { Name: "no", }, }, + { + input: ":1", + expectedErr: "invalid restart policy format: no policy provided before colon", + }, { input: "always", expected: container.RestartPolicy{ diff --git a/opts/parse.go b/opts/parse.go index 017577e4bf09..f74cff74475f 100644 --- a/opts/parse.go +++ b/opts/parse.go @@ -71,13 +71,18 @@ func ConvertKVStringsToMapWithNil(values []string) map[string]*string { // ParseRestartPolicy returns the parsed policy or an error indicating what is incorrect func ParseRestartPolicy(policy string) (container.RestartPolicy, error) { - p := container.RestartPolicy{} - if policy == "" { - return p, nil + // for backward-compatibility, we don't set the default ("no") + // policy here, because older versions of the engine may not + // support it. + return container.RestartPolicy{}, nil } - k, v, _ := strings.Cut(policy, ":") + p := container.RestartPolicy{} + k, v, ok := strings.Cut(policy, ":") + if ok && k == "" { + return container.RestartPolicy{}, fmt.Errorf("invalid restart policy format: no policy provided before colon") + } if v != "" { count, err := strconv.Atoi(v) if err != nil {