From 75d3214934b397692a2765ef6fd8ce086044831b Mon Sep 17 00:00:00 2001 From: Antonio Murdaca <runcom@redhat.com> Date: Mon, 23 Apr 2018 11:17:53 +0200 Subject: [PATCH] restartmanager: do not apply restart policy on created containers Signed-off-by: Antonio Murdaca <runcom@redhat.com> --- daemon/daemon.go | 4 ++-- integration/container/restart_test.go | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/daemon/daemon.go b/daemon/daemon.go index 9812c0be6c..e4c72be2cc 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -320,7 +320,7 @@ func (daemon *Daemon) restore() error { // not initialized yet. We will start // it after the cluster is // initialized. - if daemon.configStore.AutoRestart && c.ShouldRestart() && !c.NetworkSettings.HasSwarmEndpoint { + if daemon.configStore.AutoRestart && c.ShouldRestart() && !c.NetworkSettings.HasSwarmEndpoint && c.HasBeenStartedBefore { mapLock.Lock() restartContainers[c] = make(chan struct{}) mapLock.Unlock() @@ -450,7 +450,7 @@ func (daemon *Daemon) RestartSwarmContainers() { // Autostart all the containers which has a // swarm endpoint now that the cluster is // initialized. - if daemon.configStore.AutoRestart && c.ShouldRestart() && c.NetworkSettings.HasSwarmEndpoint { + if daemon.configStore.AutoRestart && c.ShouldRestart() && c.NetworkSettings.HasSwarmEndpoint && c.HasBeenStartedBefore { group.Add(1) go func(c *container.Container) { defer group.Done() diff --git a/integration/container/restart_test.go b/integration/container/restart_test.go index 630c50f42b..7cae183086 100644 --- a/integration/container/restart_test.go +++ b/integration/container/restart_test.go @@ -22,6 +22,7 @@ func TestDaemonRestartKillContainers(t *testing.T) { xRunning bool xRunningLiveRestore bool + xStart bool } for _, c := range []testCase{ @@ -29,6 +30,7 @@ func TestDaemonRestartKillContainers(t *testing.T) { desc: "container without restart policy", config: &container.Config{Image: "busybox", Cmd: []string{"top"}}, xRunningLiveRestore: true, + xStart: true, }, { desc: "container with restart=always", @@ -36,6 +38,12 @@ func TestDaemonRestartKillContainers(t *testing.T) { hostConfig: &container.HostConfig{RestartPolicy: container.RestartPolicy{Name: "always"}}, xRunning: true, xRunningLiveRestore: true, + xStart: true, + }, + { + desc: "container created should not be restarted", + config: &container.Config{Image: "busybox", Cmd: []string{"top"}}, + hostConfig: &container.HostConfig{RestartPolicy: container.RestartPolicy{Name: "always"}}, }, } { for _, liveRestoreEnabled := range []bool{false, true} { @@ -72,8 +80,10 @@ func TestDaemonRestartKillContainers(t *testing.T) { assert.NilError(t, err) defer client.ContainerRemove(ctx, resp.ID, types.ContainerRemoveOptions{Force: true}) - err = client.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}) - assert.NilError(t, err) + if c.xStart { + err = client.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}) + assert.NilError(t, err) + } stopDaemon(t, d) d.Start(t, args...)