diff --git a/api/client/run.go b/api/client/run.go index bf75c6fa7c..12d1b24283 100644 --- a/api/client/run.go +++ b/api/client/run.go @@ -122,7 +122,7 @@ func (cli *DockerCli) CmdRun(args ...string) error { fmt.Fprintf(cli.out, "%s\n", createResponse.ID) }() } - if *flAutoRemove && (hostConfig.RestartPolicy.Name == "always" || hostConfig.RestartPolicy.Name == "on-failure") { + if *flAutoRemove && (hostConfig.RestartPolicy.IsAlways() || hostConfig.RestartPolicy.IsOnFailure()) { return ErrConflictRestartPolicyAndAutoRemove } // We need to instantiate the chan because the select needs it. It can diff --git a/daemon/daemon.go b/daemon/daemon.go index 7926fe15d9..4540ec6993 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -325,8 +325,8 @@ func (daemon *Daemon) restore() error { logrus.Debug("Restarting containers...") for _, container := range registeredContainers { - if container.hostConfig.RestartPolicy.Name == "always" || - (container.hostConfig.RestartPolicy.Name == "on-failure" && container.ExitCode != 0) { + if container.hostConfig.RestartPolicy.IsAlways() || + (container.hostConfig.RestartPolicy.IsOnFailure() && container.ExitCode != 0) { logrus.Debugf("Starting container %s", container.ID) if err := container.Start(); err != nil { diff --git a/daemon/monitor.go b/daemon/monitor.go index 293849dd36..dfade8e218 100644 --- a/daemon/monitor.go +++ b/daemon/monitor.go @@ -223,10 +223,10 @@ func (m *containerMonitor) shouldRestart(exitCode int) bool { return false } - switch m.restartPolicy.Name { - case "always": + switch { + case m.restartPolicy.IsAlways(): return true - case "on-failure": + case m.restartPolicy.IsOnFailure(): // the default value of 0 for MaximumRetryCount means that we will not enforce a maximum count if max := m.restartPolicy.MaximumRetryCount; max != 0 && m.failureCount > max { logrus.Debugf("stopping restart of container %s because maximum failure could of %d has been reached", diff --git a/runconfig/hostconfig.go b/runconfig/hostconfig.go index 9f0f279f94..9fdb6e0fd5 100644 --- a/runconfig/hostconfig.go +++ b/runconfig/hostconfig.go @@ -129,6 +129,18 @@ type RestartPolicy struct { MaximumRetryCount int } +func (rp *RestartPolicy) IsNone() bool { + return rp.Name == "no" +} + +func (rp *RestartPolicy) IsAlways() bool { + return rp.Name == "always" +} + +func (rp *RestartPolicy) IsOnFailure() bool { + return rp.Name == "on-failure" +} + type LogConfig struct { Type string Config map[string]string