From 2e0fda9de03efe4f399a35c52cac2444b5518709 Mon Sep 17 00:00:00 2001 From: jingrui Date: Wed, 9 Jan 2019 16:43:39 +0800 Subject: [PATCH 035/111] restart: reject to restart container when removing it reason: cherry-pick commits to docker-18.09 concurrence of restart and remove a container may cause that container info is still saved in memdb while container is actually already removed. cherry-pick from 1.11.2: f7eeafa Conflicts: daemon/restart.go Change-Id: Ic9be384c908f49697c87f6b51ffcb1968f38d6cc Signed-off-by: liruilin4 Signed-off-by: lixiang172 --- components/engine/daemon/restart.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/engine/daemon/restart.go b/components/engine/daemon/restart.go index bae665f76b..2c441de873 100644 --- a/components/engine/daemon/restart.go +++ b/components/engine/daemon/restart.go @@ -55,6 +55,11 @@ func (daemon *Daemon) containerRestart(container *container.Container, seconds i container.HostConfig.AutoRemove = autoRemove // containerStop will write HostConfig to disk, we shall restore AutoRemove // in disk too + // if rm running concurrently, the container may be already removed now. we should not + // save it to disk + if container.RemovalInProgress || container.Dead { + return fmt.Errorf("can't restart a container which is dead or marked for removal") + } if toDiskErr := daemon.checkpointAndSave(container); toDiskErr != nil { logrus.Errorf("Write container to disk error: %v", toDiskErr) } -- 2.17.1