فهرست منبع

Merge pull request #19790 from Microsoft/CombineSetupWorkingDir

Combine SetupWorkingDirectory for Linux and Windows
Vincent Demeester 9 سال پیش
والد
کامیت
5f63c54192
4فایلهای تغییر یافته به همراه30 افزوده شده و 35 حذف شده
  1. 29 0
      container/container.go
  2. 0 28
      container/container_unix.go
  3. 0 6
      container/container_windows.go
  4. 1 1
      integration-cli/docker_cli_run_test.go

+ 29 - 0
container/container.go

@@ -22,6 +22,7 @@ import (
 	"github.com/docker/docker/pkg/promise"
 	"github.com/docker/docker/pkg/signal"
 	"github.com/docker/docker/pkg/symlink"
+	"github.com/docker/docker/pkg/system"
 	"github.com/docker/docker/runconfig"
 	"github.com/docker/docker/volume"
 	containertypes "github.com/docker/engine-api/types/container"
@@ -183,6 +184,34 @@ func (container *Container) WriteHostConfig() error {
 	return json.NewEncoder(f).Encode(&container.HostConfig)
 }
 
+// SetupWorkingDirectory sets up the container's working directory as set in container.Config.WorkingDir
+func (container *Container) SetupWorkingDirectory() error {
+	if container.Config.WorkingDir == "" {
+		return nil
+	}
+	container.Config.WorkingDir = filepath.Clean(container.Config.WorkingDir)
+
+	pth, err := container.GetResourcePath(container.Config.WorkingDir)
+	if err != nil {
+		return err
+	}
+
+	pthInfo, err := os.Stat(pth)
+	if err != nil {
+		if !os.IsNotExist(err) {
+			return err
+		}
+
+		if err := system.MkdirAll(pth, 0755); err != nil {
+			return err
+		}
+	}
+	if pthInfo != nil && !pthInfo.IsDir() {
+		return derr.ErrorCodeNotADir.WithArgs(container.Config.WorkingDir)
+	}
+	return nil
+}
+
 // GetResourcePath evaluates `path` in the scope of the container's BaseFS, with proper path
 // sanitisation. Symlinks are all scoped to the BaseFS of the container, as
 // though the container's BaseFS was `/`.

+ 0 - 28
container/container_unix.go

@@ -398,34 +398,6 @@ func (container *Container) BuildCreateEndpointOptions(n libnetwork.Network, epC
 	return createOptions, nil
 }
 
-// SetupWorkingDirectory sets up the container's working directory as set in container.Config.WorkingDir
-func (container *Container) SetupWorkingDirectory() error {
-	if container.Config.WorkingDir == "" {
-		return nil
-	}
-	container.Config.WorkingDir = filepath.Clean(container.Config.WorkingDir)
-
-	pth, err := container.GetResourcePath(container.Config.WorkingDir)
-	if err != nil {
-		return err
-	}
-
-	pthInfo, err := os.Stat(pth)
-	if err != nil {
-		if !os.IsNotExist(err) {
-			return err
-		}
-
-		if err := system.MkdirAll(pth, 0755); err != nil {
-			return err
-		}
-	}
-	if pthInfo != nil && !pthInfo.IsDir() {
-		return derr.ErrorCodeNotADir.WithArgs(container.Config.WorkingDir)
-	}
-	return nil
-}
-
 // appendNetworkMounts appends any network mounts to the array of mount points passed in
 func appendNetworkMounts(container *Container, volumeMounts []volume.MountPoint) ([]volume.MountPoint, error) {
 	for _, mnt := range container.NetworkMounts() {

+ 0 - 6
container/container_windows.go

@@ -22,12 +22,6 @@ func (container *Container) CreateDaemonEnvironment(linkedEnv []string) []string
 	return container.Config.Env
 }
 
-// SetupWorkingDirectory initializes the container working directory.
-// This is a NOOP In windows.
-func (container *Container) SetupWorkingDirectory() error {
-	return nil
-}
-
 // UnmountIpcMounts unmount Ipc related mounts.
 // This is a NOOP on windows.
 func (container *Container) UnmountIpcMounts(unmount func(pth string) error) {

+ 1 - 1
integration-cli/docker_cli_run_test.go

@@ -1701,7 +1701,7 @@ func (s *DockerSuite) TestRunWorkdirExistsAndIsFile(c *check.C) {
 	expected := "Cannot mkdir: /bin/cat is not a directory"
 	if daemonPlatform == "windows" {
 		existingFile = `\windows\system32\ntdll.dll`
-		expected = "The directory name is invalid"
+		expected = `Cannot mkdir: \windows\system32\ntdll.dll is not a directory.`
 	}
 
 	out, exitCode, err := dockerCmdWithError("run", "-w", existingFile, "busybox")