瀏覽代碼

Merge pull request #47110 from corhere/backport-23.0/lock-container-when-deleting-root

[23.0 backport] Lock container when deleting its root directory
Sebastiaan van Stijn 1 年之前
父節點
當前提交
190138d0ec
共有 1 個文件被更改,包括 8 次插入1 次删除
  1. 8 1
      daemon/delete.go

+ 8 - 1
daemon/delete.go

@@ -138,7 +138,14 @@ func (daemon *Daemon) cleanupContainer(container *container.Container, config ty
 		container.RWLayer = nil
 	}
 
-	if err := containerfs.EnsureRemoveAll(container.Root); err != nil {
+	// Hold the container lock while deleting the container root directory
+	// so that other goroutines don't attempt to concurrently open files
+	// within it. Having any file open on Windows (without the
+	// FILE_SHARE_DELETE flag) will block it from being deleted.
+	container.Lock()
+	err := containerfs.EnsureRemoveAll(container.Root)
+	container.Unlock()
+	if err != nil {
 		err = errors.Wrapf(err, "unable to remove filesystem for %s", container.ID)
 		container.SetRemovalError(err)
 		return err