diff --git a/integration-cli/docker_cli_restart_test.go b/integration-cli/docker_cli_restart_test.go index 3a390ef2c..93821f726 100644 --- a/integration-cli/docker_cli_restart_test.go +++ b/integration-cli/docker_cli_restart_test.go @@ -151,3 +151,72 @@ func TestRestartWithVolumes(t *testing.T) { logDone("restart - does not create a new volume on restart") } + +func TestRecordRestartPolicyNO(t *testing.T) { + defer deleteAllContainers() + + cmd := exec.Command(dockerBinary, "run", "-d", "--restart=no", "busybox", "false") + out, _, err := runCommandWithOutput(cmd) + if err != nil { + t.Fatal(err, out) + } + + id := strings.TrimSpace(string(out)) + name, err := inspectField(id, "HostConfig.RestartPolicy.Name") + if err != nil { + t.Fatal(err, out) + } + if name != "no" { + t.Fatalf("Container restart policy name is %s, expected %s", name, "no") + } + + logDone("restart - recording restart policy name for --restart=no") +} + +func TestRecordRestartPolicyAlways(t *testing.T) { + defer deleteAllContainers() + + cmd := exec.Command(dockerBinary, "run", "-d", "--restart=always", "busybox", "false") + out, _, err := runCommandWithOutput(cmd) + if err != nil { + t.Fatal(err, out) + } + + id := strings.TrimSpace(string(out)) + name, err := inspectField(id, "HostConfig.RestartPolicy.Name") + if err != nil { + t.Fatal(err, out) + } + if name != "always" { + t.Fatalf("Container restart policy name is %s, expected %s", name, "always") + } + + cmd = exec.Command(dockerBinary, "stop", id) + out, _, err = runCommandWithOutput(cmd) + if err != nil { + t.Fatal(err, out) + } + + logDone("restart - recording restart policy name for --restart=always") +} + +func TestRecordRestartPolicyOnFailure(t *testing.T) { + defer deleteAllContainers() + + cmd := exec.Command(dockerBinary, "run", "-d", "--restart=on-failure:1", "busybox", "false") + out, _, err := runCommandWithOutput(cmd) + if err != nil { + t.Fatal(err, out) + } + + id := strings.TrimSpace(string(out)) + name, err := inspectField(id, "HostConfig.RestartPolicy.Name") + if err != nil { + t.Fatal(err, out) + } + if name != "on-failure" { + t.Fatalf("Container restart policy name is %s, expected %s", name, "on-failure") + } + + logDone("restart - recording restart policy name for --restart=on-failure") +} diff --git a/runconfig/parse.go b/runconfig/parse.go index 3502270b2..20510660f 100644 --- a/runconfig/parse.go +++ b/runconfig/parse.go @@ -336,18 +336,15 @@ func parseRestartPolicy(policy string) (RestartPolicy, error) { name = parts[0] ) + p.Name = name switch name { case "always": - p.Name = name - if len(parts) == 2 { return p, fmt.Errorf("maximum restart count not valid with restart policy of \"always\"") } case "no": // do nothing case "on-failure": - p.Name = name - if len(parts) == 2 { count, err := strconv.Atoi(parts[1]) if err != nil {