docker/patch/0060-debug-Add-check-when-execute-docker-cp-export.patch

91 lines
3.1 KiB
Diff
Raw Normal View History

2019-09-30 10:37:25 -04:00
From 42d1e785f2343323822db35966412fdcfce87989 Mon Sep 17 00:00:00 2001
From: zhangyu235 <zhangyu235@huawei.com>
Date: Fri, 18 Jan 2019 15:55:51 +0800
Subject: [PATCH 060/111] debug: Add check when execute docker {cp,
export, diff}
reason:If a container is in Dead or RemovalInProgress state,it should return err for tip.
Cherry-pick from docker 1.11.2:
- 903a5de Add check when execute docker {cp, export, diff}
Change-Id: Idf441bf7d194cc61c618c20c0e6ef8b339e81191
Signed-off-by: yangshukui <yangshukui@huawei.com>
Signed-off-by: zhangyu235 <zhangyu235@huawei.com>
---
components/engine/daemon/archive.go | 13 +++++++++++++
components/engine/daemon/changes.go | 5 +++++
2 files changed, 18 insertions(+)
diff --git a/components/engine/daemon/archive.go b/components/engine/daemon/archive.go
index 9c7971b56e..f1b715d9ae 100644
--- a/components/engine/daemon/archive.go
+++ b/components/engine/daemon/archive.go
@@ -1,6 +1,7 @@
package daemon // import "github.com/docker/docker/daemon"
import (
+ "fmt"
"io"
"os"
"strings"
@@ -77,6 +78,10 @@ func (daemon *Daemon) ContainerStatPath(name string, path string) (stat *types.C
return nil, err
}
+ if container.RemovalInProgress || container.Dead {
+ return nil, fmt.Errorf("can't stat file from a container which is dead or marked for removal")
+ }
+
// Make sure an online file-system operation is permitted.
if err := daemon.isOnlineFSOperationPermitted(container); err != nil {
return nil, errdefs.System(err)
@@ -102,6 +107,10 @@ func (daemon *Daemon) ContainerArchivePath(name string, path string) (content io
return nil, nil, err
}
+ if container.RemovalInProgress || container.Dead {
+ return nil, nil, fmt.Errorf("can't copy file from a container which is dead or marked for removal")
+ }
+
// Make sure an online file-system operation is permitted.
if err := daemon.isOnlineFSOperationPermitted(container); err != nil {
return nil, nil, errdefs.System(err)
@@ -130,6 +139,10 @@ func (daemon *Daemon) ContainerExtractToDir(name, path string, copyUIDGID, noOve
return err
}
+ if container.RemovalInProgress || container.Dead {
+ return fmt.Errorf("can't copy to a container which is dead or marked for removal")
+ }
+
// Make sure an online file-system operation is permitted.
if err := daemon.isOnlineFSOperationPermitted(container); err != nil {
return errdefs.System(err)
diff --git a/components/engine/daemon/changes.go b/components/engine/daemon/changes.go
index 70b3f6b943..55575a96bd 100644
--- a/components/engine/daemon/changes.go
+++ b/components/engine/daemon/changes.go
@@ -6,6 +6,7 @@ import (
"time"
"github.com/docker/docker/pkg/archive"
+ "fmt"
)
// ContainerChanges returns a list of container fs changes
@@ -16,6 +17,10 @@ func (daemon *Daemon) ContainerChanges(name string) ([]archive.Change, error) {
return nil, err
}
+ if container.RemovalInProgress || container.Dead {
+ return nil, fmt.Errorf("can't diff a container which is dead or marked for removal")
+ }
+
if runtime.GOOS == "windows" && container.IsRunning() {
return nil, errors.New("Windows does not support diff of a running container")
}
--
2.17.1