diff --git a/dockerclient/archive.go b/dockerclient/archive.go index 773008811..8e1096fc4 100644 --- a/dockerclient/archive.go +++ b/dockerclient/archive.go @@ -158,7 +158,7 @@ func archiveFromURL(src, dst, tempDir string, check DirectoryCheck) (io.Reader, func archiveFromDisk(directory string, src, dst string, allowDownload bool, excludes []string, check DirectoryCheck) (io.Reader, io.Closer, error) { var err error if filepath.IsAbs(src) { - src, err = filepath.Rel(filepath.Dir(src), src) + src, err = filepath.Rel(directory, filepath.Join(directory, src)) if err != nil { return nil, nil, err } diff --git a/dockerclient/conformance_test.go b/dockerclient/conformance_test.go index e20262d73..3b618814a 100644 --- a/dockerclient/conformance_test.go +++ b/dockerclient/conformance_test.go @@ -287,6 +287,21 @@ func TestConformanceInternal(t *testing.T) { Name: "copy to renamed file", ContextDir: "testdata/copyrename", }, + { + Name: "copy subdirectory 1", + ContextDir: "testdata/copyblahblub", + Dockerfile: "Dockerfile", + }, + { + Name: "copy subdirectory 2", + ContextDir: "testdata/copyblahblub", + Dockerfile: "Dockerfile2", + }, + { + Name: "copy subdirectory 3", + ContextDir: "testdata/copyblahblub", + Dockerfile: "Dockerfile3", + }, { Name: "directory with slash", ContextDir: "testdata/overlapdir", diff --git a/dockerclient/testdata/copyblahblub/Dockerfile b/dockerclient/testdata/copyblahblub/Dockerfile new file mode 100644 index 000000000..3c64a2166 --- /dev/null +++ b/dockerclient/testdata/copyblahblub/Dockerfile @@ -0,0 +1,4 @@ +FROM busybox +COPY firstdir/seconddir /var +RUN ls -la /var +RUN ls -la /var/dir-a diff --git a/dockerclient/testdata/copyblahblub/Dockerfile2 b/dockerclient/testdata/copyblahblub/Dockerfile2 new file mode 100644 index 000000000..688b352bf --- /dev/null +++ b/dockerclient/testdata/copyblahblub/Dockerfile2 @@ -0,0 +1,4 @@ +FROM busybox +COPY /firstdir/seconddir /var +RUN ls -la /var +RUN ls -la /var/dir-a diff --git a/dockerclient/testdata/copyblahblub/Dockerfile3 b/dockerclient/testdata/copyblahblub/Dockerfile3 new file mode 100644 index 000000000..2ef775512 --- /dev/null +++ b/dockerclient/testdata/copyblahblub/Dockerfile3 @@ -0,0 +1,4 @@ +FROM busybox +COPY /firstdir/seconddir/ /var +RUN ls -la /var +RUN ls -la /var/dir-a diff --git a/dockerclient/testdata/copyblahblub/firstdir/seconddir/dir-a/file-a b/dockerclient/testdata/copyblahblub/firstdir/seconddir/dir-a/file-a new file mode 100644 index 000000000..2f76e89bd --- /dev/null +++ b/dockerclient/testdata/copyblahblub/firstdir/seconddir/dir-a/file-a @@ -0,0 +1 @@ +file-a diff --git a/dockerclient/testdata/copyblahblub/firstdir/seconddir/dir-b/file-b b/dockerclient/testdata/copyblahblub/firstdir/seconddir/dir-b/file-b new file mode 100644 index 000000000..3b8ef5ab1 --- /dev/null +++ b/dockerclient/testdata/copyblahblub/firstdir/seconddir/dir-b/file-b @@ -0,0 +1 @@ +file-b