cli/command/container: use local copy of pkg/system.IsAbs
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
91d097e70b
commit
1eda498786
@ -17,7 +17,6 @@ import (
|
|||||||
"github.com/docker/cli/cli/streams"
|
"github.com/docker/cli/cli/streams"
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/pkg/archive"
|
"github.com/docker/docker/pkg/archive"
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
units "github.com/docker/go-units"
|
units "github.com/docker/go-units"
|
||||||
"github.com/morikuni/aec"
|
"github.com/morikuni/aec"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -235,7 +234,7 @@ func copyFromContainer(ctx context.Context, dockerCli command.Cli, copyConfig cp
|
|||||||
// If the destination is a symbolic link, we should follow it.
|
// If the destination is a symbolic link, we should follow it.
|
||||||
if err == nil && srcStat.Mode&os.ModeSymlink != 0 {
|
if err == nil && srcStat.Mode&os.ModeSymlink != 0 {
|
||||||
linkTarget := srcStat.LinkTarget
|
linkTarget := srcStat.LinkTarget
|
||||||
if !system.IsAbs(linkTarget) {
|
if !isAbs(linkTarget) {
|
||||||
// Join with the parent directory.
|
// Join with the parent directory.
|
||||||
srcParent, _ := archive.SplitPathDirEntry(srcPath)
|
srcParent, _ := archive.SplitPathDirEntry(srcPath)
|
||||||
linkTarget = filepath.Join(srcParent, linkTarget)
|
linkTarget = filepath.Join(srcParent, linkTarget)
|
||||||
@ -319,7 +318,7 @@ func copyToContainer(ctx context.Context, dockerCli command.Cli, copyConfig cpCo
|
|||||||
// If the destination is a symbolic link, we should evaluate it.
|
// If the destination is a symbolic link, we should evaluate it.
|
||||||
if err == nil && dstStat.Mode&os.ModeSymlink != 0 {
|
if err == nil && dstStat.Mode&os.ModeSymlink != 0 {
|
||||||
linkTarget := dstStat.LinkTarget
|
linkTarget := dstStat.LinkTarget
|
||||||
if !system.IsAbs(linkTarget) {
|
if !isAbs(linkTarget) {
|
||||||
// Join with the parent directory.
|
// Join with the parent directory.
|
||||||
dstParent, _ := archive.SplitPathDirEntry(dstPath)
|
dstParent, _ := archive.SplitPathDirEntry(dstPath)
|
||||||
linkTarget = filepath.Join(dstParent, linkTarget)
|
linkTarget = filepath.Join(dstParent, linkTarget)
|
||||||
@ -434,7 +433,7 @@ func copyToContainer(ctx context.Context, dockerCli command.Cli, copyConfig cpCo
|
|||||||
// client, a `:` could be part of an absolute Windows path, in which case it
|
// client, a `:` could be part of an absolute Windows path, in which case it
|
||||||
// is immediately proceeded by a backslash.
|
// is immediately proceeded by a backslash.
|
||||||
func splitCpArg(arg string) (ctr, path string) {
|
func splitCpArg(arg string) (ctr, path string) {
|
||||||
if system.IsAbs(arg) {
|
if isAbs(arg) {
|
||||||
// Explicit local absolute path, e.g., `C:\foo` or `/foo`.
|
// Explicit local absolute path, e.g., `C:\foo` or `/foo`.
|
||||||
return "", arg
|
return "", arg
|
||||||
}
|
}
|
||||||
@ -448,3 +447,15 @@ func splitCpArg(arg string) (ctr, path string) {
|
|||||||
|
|
||||||
return ctr, path
|
return ctr, path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsAbs is a platform-agnostic wrapper for filepath.IsAbs.
|
||||||
|
//
|
||||||
|
// On Windows, golang filepath.IsAbs does not consider a path \windows\system32
|
||||||
|
// as absolute as it doesn't start with a drive-letter/colon combination. However,
|
||||||
|
// in docker we need to verify things such as WORKDIR /windows/system32 in
|
||||||
|
// a Dockerfile (which gets translated to \windows\system32 when being processed
|
||||||
|
// by the daemon). This SHOULD be treated as absolute from a docker processing
|
||||||
|
// perspective.
|
||||||
|
func isAbs(path string) bool {
|
||||||
|
return filepath.IsAbs(path) || strings.HasPrefix(path, string(os.PathSeparator))
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user