From cde0ed67a14e3983ba83af8c75434558c865b2bc Mon Sep 17 00:00:00 2001 From: Lei Jitang Date: Fri, 8 Jan 2016 12:11:21 +0800 Subject: [PATCH] Create the working directory on container creation if create a container with -w to specify the working directory and the directory does not exist in the container rootfs, the directory will be created until the container start. It make docker export of a created container and a running container inconsistent. Signed-off-by: Lei Jitang --- daemon/create_unix.go | 4 ++++ integration-cli/docker_cli_build_test.go | 4 ++-- integration-cli/docker_cli_create_test.go | 8 ++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/daemon/create_unix.go b/daemon/create_unix.go index 865400cacc..007c48cd70 100644 --- a/daemon/create_unix.go +++ b/daemon/create_unix.go @@ -22,6 +22,10 @@ func (daemon *Daemon) createContainerPlatformSpecificSettings(container *contain } defer daemon.Unmount(container) + if err := container.SetupWorkingDirectory(); err != nil { + return err + } + for spec := range config.Volumes { name := stringid.GenerateNonCryptoID() destination := filepath.Clean(spec) diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go index a8fd723848..c203aa71c4 100644 --- a/integration-cli/docker_cli_build_test.go +++ b/integration-cli/docker_cli_build_test.go @@ -6152,8 +6152,8 @@ func (s *DockerSuite) TestBuildBuildTimeArgExpansion(c *check.C) { if err != nil { c.Fatal(err) } - if res != wdVal { - c.Fatalf("Config.WorkingDir value mismatch. Expected: %s, got: %s", wdVal, res) + if res != filepath.Clean(wdVal) { + c.Fatalf("Config.WorkingDir value mismatch. Expected: %s, got: %s", filepath.Clean(wdVal), res) } err = inspectFieldAndMarshall(imgName, "Config.Env", &resArr) diff --git a/integration-cli/docker_cli_create_test.go b/integration-cli/docker_cli_create_test.go index bbd1eb6df1..fc7f9a42eb 100644 --- a/integration-cli/docker_cli_create_test.go +++ b/integration-cli/docker_cli_create_test.go @@ -415,3 +415,11 @@ func (s *DockerSuite) TestCreateStopSignal(c *check.C) { c.Assert(res, checker.Contains, "9") } + +func (s *DockerSuite) TestCreateWithWorkdir(c *check.C) { + testRequires(c, DaemonIsLinux) + name := "foo" + dir := "/home/foo/bar" + dockerCmd(c, "create", "--name", name, "-w", dir, "busybox") + dockerCmd(c, "cp", fmt.Sprintf("%s:%s", name, dir), "/tmp") +}