testcontainers-java: [Bug]: 1.18.1 to 1.18.3 gives Out Of Heap Memory exception for DockerComposeContainer
Module
Core
Testcontainers version
1.18.1 to 1.18.3
Using the latest Testcontainers version?
Yes
Host OS
MacOS
Host Arch
x86 Intel Core i7
Docker version
$ docker version
Client:
Cloud integration: v1.0.31
Version: 23.0.5
API version: 1.42
Go version: go1.19.8
Git commit: bc4487a
Built: Wed Apr 26 16:12:52 2023
OS/Arch: darwin/amd64
Context: default
Server: Docker Desktop 4.19.0 (106363)
Engine:
Version: 23.0.5
API version: 1.42 (minimum version 1.12)
Go version: go1.19.8
Git commit: 94d3ad6
Built: Wed Apr 26 16:17:45 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.20
GitCommit: 2806fc1057397dbaeefbea0e4e17bddfbd388f38
runc:
Version: 1.1.5
GitCommit: v1.1.5-0-gf19387a
docker-init:
Version: 0.19.0
GitCommit: de40ad0
What happened?
When upgrading only test containers from 1.18.0 to 1.18.1 got heap error on startup of my Docker Compose based Integration tests. Also tried 1.18.3.
Relevant log output
org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not complete execution for Gradle Test Executor 1.
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:64)
at java.base@11.0.8/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base@11.0.8/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base@11.0.8/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base@11.0.8/java.lang.reflect.Method.invoke(Method.java:566)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at com.sun.proxy.$Proxy5.stop(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3745)
at java.base/java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:120)
at java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:95)
at java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:156)
at org.apache.commons.compress.utils.CountingOutputStream.write(CountingOutputStream.java:48)
at org.apache.commons.compress.utils.FixedLengthBlockOutputStream$BufferAtATimeOutputChannel.write(FixedLengthBlockOutputStream.java:244)
at org.apache.commons.compress.utils.FixedLengthBlockOutputStream.writeBlock(FixedLengthBlockOutputStream.java:92)
at org.apache.commons.compress.utils.FixedLengthBlockOutputStream.maybeFlush(FixedLengthBlockOutputStream.java:86)
at org.apache.commons.compress.utils.FixedLengthBlockOutputStream.write(FixedLengthBlockOutputStream.java:122)
at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.write(TarArchiveOutputStream.java:462)
at java.base/java.io.InputStream.transferTo(InputStream.java:705)
at java.base/java.nio.file.Files.copy(Files.java:3119)
at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:362)
at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:371)
at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:371)
at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:371)
at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:371)
at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:371)
at org.testcontainers.utility.MountableFile.transferTo(MountableFile.java:327)
at org.testcontainers.containers.ContainerState.copyFileToContainer(ContainerState.java:306)
at org.testcontainers.containers.ContainerState.copyFileToContainer(ContainerState.java:282)
at org.testcontainers.containers.GenericContainer$$Lambda$482/0x0000000800420840.accept(Unknown Source)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:430)
at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:344)
at org.testcontainers.containers.GenericContainer$$Lambda$447/0x0000000800393c40.call(Unknown Source)
at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:334)
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:322)
at org.testcontainers.containers.ContainerisedDockerCompose.invoke(DockerComposeContainer.java:727)
at org.testcontainers.containers.DockerComposeContainer.runWithCompose(DockerComposeContainer.java:339)
at org.testcontainers.containers.DockerComposeContainer.createServices(DockerComposeContainer.java:260)
Additional Information
No response
About this issue
- Original URL
- State: open
- Created a year ago
- Reactions: 2
- Comments: 20 (2 by maintainers)
So sounds like two work-arounds so far
use withLocalCompose(true)as per https://github.com/testcontainers/testcontainers-java/issues/7239#issuecomment-1688298605FYI I just tried work-around of moving the
docker-compose.ymlto it’s own directory but still no luckThanks! good catch! I didn’t fall into that because the docker-compose files are inside different folders.
I need to figure out how to fix it properly. The workaround would be to move the docker-compose.yml to a folder