Fix stopped containers with restart-policy showing as "restarting"
When manually stopping a container with a restart-policy, the container would show as "restarting" in `docker ps` whereas its actual state is "exited". Stopping a container with a restart policy shows the container as "restarting" docker run -d --name test --restart unless-stopped busybox false docker stop test docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7e07409fa1d3 busybox "false" 5 minutes ago Restarting (1) 4 minutes ago test However, inspecting the same container shows that it's exited: docker inspect test --format '{{ json .State }}' { "Status": "exited", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 0, "ExitCode": 1, "Error": "", "StartedAt": "2019-02-14T13:26:27.6091648Z", "FinishedAt": "2019-02-14T13:26:27.689427Z" } And killing the container confirms this; docker kill test Error response from daemon: Cannot kill container: test: Container 7e07409fa1d36dc8d8cb8f25cf12ee1168ad9040183b85fafa73ee2c1fcf9361 is not running docker run -d --name test --restart unless-stopped busybox false docker stop test docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0595237054a busybox "false" 5 minutes ago Restarting (1) 4 minutes ago exit Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
91d934b41b
commit
8c0ecb6387
|
@ -85,6 +85,8 @@ func (daemon *Daemon) ProcessEvent(id string, e libcontainerd.EventType, ei libc
|
||||||
}
|
}
|
||||||
daemon.LogContainerEventWithAttributes(c, "die", attributes)
|
daemon.LogContainerEventWithAttributes(c, "die", attributes)
|
||||||
daemon.Cleanup(c)
|
daemon.Cleanup(c)
|
||||||
|
daemon.setStateCounter(c)
|
||||||
|
cpErr := c.CheckpointTo(daemon.containersReplica)
|
||||||
|
|
||||||
if err == nil && restart {
|
if err == nil && restart {
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -101,6 +103,8 @@ func (daemon *Daemon) ProcessEvent(id string, e libcontainerd.EventType, ei libc
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Lock()
|
c.Lock()
|
||||||
c.SetStopped(&exitStatus)
|
c.SetStopped(&exitStatus)
|
||||||
|
daemon.setStateCounter(c)
|
||||||
|
c.CheckpointTo(daemon.containersReplica)
|
||||||
c.Unlock()
|
c.Unlock()
|
||||||
defer daemon.autoRemove(c)
|
defer daemon.autoRemove(c)
|
||||||
if err != restartmanager.ErrRestartCanceled {
|
if err != restartmanager.ErrRestartCanceled {
|
||||||
|
@ -110,8 +114,7 @@ func (daemon *Daemon) ProcessEvent(id string, e libcontainerd.EventType, ei libc
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
daemon.setStateCounter(c)
|
return cpErr
|
||||||
return c.CheckpointTo(daemon.containersReplica)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if execConfig := c.ExecCommands.Get(ei.ProcessID); execConfig != nil {
|
if execConfig := c.ExecCommands.Get(ei.ProcessID); execConfig != nil {
|
||||||
|
|
Loading…
Reference in New Issue