Selaa lähdekoodia

Reset RemovalInProgress flag on daemon restart

This flag can be set on disk if the daemon were to crash or error out
while trying to remove container in which case subsequent tries to
delete the container would all fail.

Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
Kenfe-Mickael Laventure 9 vuotta sitten
vanhempi
commit
ce72473197
1 muutettua tiedostoa jossa 15 lisäystä ja 0 poistoa
  1. 15 0
      daemon/daemon.go

+ 15 - 0
daemon/daemon.go

@@ -314,6 +314,21 @@ func (daemon *Daemon) restore() error {
 				mapLock.Unlock()
 			}
 
+			if c.RemovalInProgress {
+				// We probably crashed in the middle of a removal, reset
+				// the flag.
+				//
+				// We DO NOT remove the container here as we do not
+				// know if the user had requested for either the
+				// associated volumes, network links or both to also
+				// be removed. So we put the container in the "dead"
+				// state and leave further processing up to them.
+				logrus.Debugf("Resetting RemovalInProgress flag from %v", c.ID)
+				c.ResetRemovalInProgress()
+				c.SetDead()
+				c.ToDisk()
+			}
+
 			// if c.hostConfig.Links is nil (not just empty), then it is using the old sqlite links and needs to be migrated
 			if c.HostConfig != nil && c.HostConfig.Links == nil {
 				migrateLegacyLinks = true