Browse Source

Merge pull request #6646 from tiborvass/fix-workdir

Fix --workdir=/
Michael Crosby 11 years ago
parent
commit
d91b8bcf0b
2 changed files with 20 additions and 2 deletions
  1. 14 0
      integration-cli/docker_cli_run_test.go
  2. 6 2
      pkg/symlink/fs.go

+ 14 - 0
integration-cli/docker_cli_run_test.go

@@ -946,3 +946,17 @@ func TestModeHostname(t *testing.T) {
 
 	logDone("run - hostname and several network modes")
 }
+
+func TestRootWorkdir(t *testing.T) {
+	s, _, err := cmd(t, "run", "--workdir", "/", "busybox", "pwd")
+	if err != nil {
+		t.Fatal(s, err)
+	}
+	if s != "/\n" {
+		t.Fatalf("pwd returned '%s' (expected /\\n)", s)
+	}
+
+	deleteAllContainers()
+
+	logDone("run - workdir /")
+}

+ 6 - 2
pkg/symlink/fs.go

@@ -13,8 +13,6 @@ const maxLoopCounter = 100
 // FollowSymlink will follow an existing link and scope it to the root
 // path provided.
 func FollowSymlinkInScope(link, root string) (string, error) {
-	prev := "/"
-
 	root, err := filepath.Abs(root)
 	if err != nil {
 		return "", err
@@ -25,10 +23,16 @@ func FollowSymlinkInScope(link, root string) (string, error) {
 		return "", err
 	}
 
+	if link == root {
+		return root, nil
+	}
+
 	if !strings.HasPrefix(filepath.Dir(link), root) {
 		return "", fmt.Errorf("%s is not within %s", link, root)
 	}
 
+	prev := "/"
+
 	for _, p := range strings.Split(link, "/") {
 		prev = filepath.Join(prev, p)
 		prev = filepath.Clean(prev)