Merge pull request #35355 from x1022as/unless-stop

fix unless-stopped unexpected behavior
This commit is contained in:
Vincent Demeester 2019-02-04 10:28:23 +01:00 committed by GitHub
commit e7a9a7cdbc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 5 deletions

View File

@ -87,6 +87,7 @@ func (daemon *Daemon) killWithSignal(container *containerpkg.Container, sig int)
if !daemon.IsShuttingDown() {
container.HasBeenManuallyStopped = true
container.CheckpointTo(daemon.containersReplica)
}
// if the container is currently restarting we do not need to send the signal

View File

@ -158,6 +158,7 @@ func (daemon *Daemon) containerStart(container *container.Container, checkpoint
if resetRestartManager {
container.ResetRestartManager(true)
container.HasBeenManuallyStopped = false
}
if daemon.saveApparmorConfig(container); err != nil {
@ -194,7 +195,6 @@ func (daemon *Daemon) containerStart(container *container.Container, checkpoint
}
container.SetRunning(pid, true)
container.HasBeenManuallyStopped = false
container.HasBeenStartedBefore = true
daemon.setStateCounter(container)

View File

@ -124,6 +124,9 @@ func (s *DockerDaemonSuite) TestDaemonRestartUnlessStopped(c *check.C) {
out, err = s.d.Cmd("run", "-d", "--name", "top2", "--restart", "unless-stopped", "busybox:latest", "top")
c.Assert(err, check.IsNil, check.Commentf("run top2: %v", out))
out, err = s.d.Cmd("run", "-d", "--name", "exit", "--restart", "unless-stopped", "busybox:latest", "false")
c.Assert(err, check.IsNil, check.Commentf("run exit: %v", out))
testRun := func(m map[string]bool, prefix string) {
var format string
for name, shouldRun := range m {
@ -139,7 +142,10 @@ func (s *DockerDaemonSuite) TestDaemonRestartUnlessStopped(c *check.C) {
}
// both running
testRun(map[string]bool{"top1": true, "top2": true}, "")
testRun(map[string]bool{"top1": true, "top2": true, "exit": true}, "")
out, err = s.d.Cmd("stop", "exit")
c.Assert(err, check.IsNil, check.Commentf(out))
out, err = s.d.Cmd("stop", "top1")
c.Assert(err, check.IsNil, check.Commentf("%s", out))
@ -148,20 +154,23 @@ func (s *DockerDaemonSuite) TestDaemonRestartUnlessStopped(c *check.C) {
c.Assert(err, check.IsNil, check.Commentf("%s", out))
// both stopped
testRun(map[string]bool{"top1": false, "top2": false}, "")
testRun(map[string]bool{"top1": false, "top2": false, "exit": false}, "")
s.d.Restart(c)
// restart=always running
testRun(map[string]bool{"top1": true, "top2": false}, "After daemon restart: ")
testRun(map[string]bool{"top1": true, "top2": false, "exit": false}, "After daemon restart: ")
out, err = s.d.Cmd("start", "top2")
c.Assert(err, check.IsNil, check.Commentf("start top2: %v", out))
out, err = s.d.Cmd("start", "exit")
c.Assert(err, check.IsNil, check.Commentf("start exit: %v", out))
s.d.Restart(c)
// both running
testRun(map[string]bool{"top1": true, "top2": true}, "After second daemon restart: ")
testRun(map[string]bool{"top1": true, "top2": true, "exit": true}, "After second daemon restart: ")
}