diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index 932acc9d7e..6be4d92d7b 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -1361,3 +1361,32 @@ func TestState(t *testing.T) { } logDone("run - test container state.") } + +// Test for #1737 +func TestCopyVolumeUidGid(t *testing.T) { + name := "testrunvolumesuidgid" + defer deleteImages(name) + defer deleteAllContainers() + _, err := buildImage(name, + `FROM busybox + RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd + RUN echo 'dockerio:x:1001:' >> /etc/group + RUN mkdir -p /hello && touch /hello/test && chown dockerio.dockerio /hello`, + true) + if err != nil { + t.Fatal(err) + } + + // Test that the uid and gid is copied from the image to the volume + cmd := exec.Command(dockerBinary, "run", "--rm", "-v", "/hello", name, "sh", "-c", "ls -l / | grep hello | awk '{print $3\":\"$4}'") + out, _, err := runCommandWithOutput(cmd) + if err != nil { + t.Fatal(err, out) + } + out = strings.TrimSpace(out) + if out != "dockerio:dockerio" { + t.Fatalf("Wrong /hello ownership: %s, expected dockerio:dockerio", out) + } + + logDone("run - copy uid/gid for volume") +} diff --git a/integration/container_test.go b/integration/container_test.go index e70da5f14d..ebef2bd4cf 100644 --- a/integration/container_test.go +++ b/integration/container_test.go @@ -370,66 +370,6 @@ func tempDir(t *testing.T) string { return tmpDir } -// Test for #1737 -func TestCopyVolumeUidGid(t *testing.T) { - eng := NewTestEngine(t) - r := mkDaemonFromEngine(eng, t) - defer r.Nuke() - - // Add directory not owned by root - container1, _, _ := mkContainer(r, []string{"_", "/bin/sh", "-c", "mkdir -p /hello && touch /hello/test && chown daemon.daemon /hello"}, t) - defer r.Destroy(container1) - - if container1.State.IsRunning() { - t.Errorf("Container shouldn't be running") - } - if err := container1.Run(); err != nil { - t.Fatal(err) - } - if container1.State.IsRunning() { - t.Errorf("Container shouldn't be running") - } - - img, err := r.Commit(container1, "", "", "unit test commited image", "", true, nil) - if err != nil { - t.Error(err) - } - - // Test that the uid and gid is copied from the image to the volume - tmpDir1 := tempDir(t) - defer os.RemoveAll(tmpDir1) - stdout1, _ := runContainer(eng, r, []string{"-v", "/hello", img.ID, "stat", "-c", "%U %G", "/hello"}, t) - if !strings.Contains(stdout1, "daemon daemon") { - t.Fatal("Container failed to transfer uid and gid to volume") - } - - container2, _, _ := mkContainer(r, []string{"_", "/bin/sh", "-c", "mkdir -p /hello && chown daemon.daemon /hello"}, t) - defer r.Destroy(container1) - - if container2.State.IsRunning() { - t.Errorf("Container shouldn't be running") - } - if err := container2.Run(); err != nil { - t.Fatal(err) - } - if container2.State.IsRunning() { - t.Errorf("Container shouldn't be running") - } - - img2, err := r.Commit(container2, "", "", "unit test commited image", "", true, nil) - if err != nil { - t.Error(err) - } - - // Test that the uid and gid is copied from the image to the volume - tmpDir2 := tempDir(t) - defer os.RemoveAll(tmpDir2) - stdout2, _ := runContainer(eng, r, []string{"-v", "/hello", img2.ID, "stat", "-c", "%U %G", "/hello"}, t) - if !strings.Contains(stdout2, "daemon daemon") { - t.Fatal("Container failed to transfer uid and gid to volume") - } -} - // Test for #1582 func TestCopyVolumeContent(t *testing.T) { eng := NewTestEngine(t)