diff --git a/core/src/main/java/org/testcontainers/containers/GenericContainer.java b/core/src/main/java/org/testcontainers/containers/GenericContainer.java index baf79474aaa..e3a16c2dacb 100644 --- a/core/src/main/java/org/testcontainers/containers/GenericContainer.java +++ b/core/src/main/java/org/testcontainers/containers/GenericContainer.java @@ -1154,16 +1154,13 @@ public void copyFileToContainer(Transferable transferable, String containerPath) ) { tarArchive.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX); - int lastSlashIndex = StringUtils.removeEnd(containerPath, "/").lastIndexOf("/"); - String extractArchiveTo = containerPath.substring(0, lastSlashIndex + 1); - String pathInArchive = containerPath.substring(lastSlashIndex + 1); - transferable.transferTo(tarArchive, pathInArchive); + transferable.transferTo(tarArchive, containerPath); tarArchive.finish(); dockerClient .copyArchiveToContainerCmd(containerId) .withTarInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())) - .withRemotePath(extractArchiveTo) + .withRemotePath("/") .exec(); } } diff --git a/core/src/test/java/org/testcontainers/junit/CopyFileToContainerTest.java b/core/src/test/java/org/testcontainers/junit/CopyFileToContainerTest.java index 0641bc7d50d..ed6ee561505 100644 --- a/core/src/test/java/org/testcontainers/junit/CopyFileToContainerTest.java +++ b/core/src/test/java/org/testcontainers/junit/CopyFileToContainerTest.java @@ -59,4 +59,18 @@ public void shouldUseCopyOnlyWithReadOnlyClasspathResources() { assertFalse("uses mount for read-only with Selinux", copyMap.containsValue("/readOnlyShared")); assertFalse("uses mount for read-write", copyMap.containsValue("/readWrite")); } + + @Test + public void shouldCreateFoldersStructureWithCopy() throws Exception { + String resource = "/test_copy_to_container.txt"; + try ( + GenericContainer container = new GenericContainer<>() + .withCommand("sleep", "3000") + .withClasspathResourceMapping(resource, "/a/b/c/file", BindMode.READ_ONLY) + ) { + container.start(); + String filesList = container.execInContainer("ls", "/a/b/c/").getStdout(); + assertTrue("file list contains the file", filesList.contains("file")); + } + } }