diff --git a/src/main/java/com/github/dockerjava/core/util/TarDirWalker.java b/src/main/java/com/github/dockerjava/core/util/TarDirWalker.java index 7c3a9ca29..af263ee9c 100644 --- a/src/main/java/com/github/dockerjava/core/util/TarDirWalker.java +++ b/src/main/java/com/github/dockerjava/core/util/TarDirWalker.java @@ -26,6 +26,7 @@ public TarDirWalker(Path basePath, TarArchiveOutputStream tarArchiveOutputStream public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { if (!dir.equals(basePath)) { tarArchiveOutputStream.putArchiveEntry(new TarArchiveEntry(FilePathUtil.relativize(basePath, dir))); + tarArchiveOutputStream.closeArchiveEntry(); } return FileVisitResult.CONTINUE; } diff --git a/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java index 0f8f2164b..06967706f 100644 --- a/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java @@ -90,5 +90,32 @@ public void copyToNonExistingContainer() throws Exception { } catch (NotFoundException ignored) { } } + + @Test + public void copyDirWithLastAddedTarEnryEmptyDir() throws Exception{ + // create a temp dir + Path localDir = Files.createTempDirectory(""); + localDir.toFile().deleteOnExit(); + // create sub-dir with name b + Path emptyDir = Files.createTempDirectory(localDir.resolve("b"), ""); + emptyDir.toFile().deleteOnExit(); + // creaet sub-dir with name a + Path dirWithFile = Files.createTempDirectory(localDir.resolve("a"), ""); + dirWithFile.toFile().deleteOnExit(); + // create file in sub-dir b, name or conter are irrelevant + Path file = Files.createTempFile(dirWithFile.resolve("file"), "", ""); + file.toFile().deleteOnExit(); + + // create a test container + CreateContainerResponse container = dockerClient.createContainerCmd("progrium/busybox:latest") + .withCmd("/bin/sh", "-c", "while true; do sleep 9999; done") + .exec(); + // start the container + dockerClient.startContainerCmd(container.getId()).exec(); + // copy data from local dir to container + dockerClient.copyArchiveToContainerCmd(container.getId()) + .withHostResource(localDir.toString()) + .exec(); + } }