-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Description
Module
Core
Testcontainers version
1.21.3
Using the latest Testcontainers version?
Yes
Host OS
Linux
Host Arch
Intel Core Ultra 7
Docker version
Docker version 28.5.2, build ecc6942What happened?
Hello,
I am using Testcontainers with Spring Boot 3.5.3 Junit 5.
I tried to use the ComposeContainer with a compose file as input.
I have an abstract class for the test which starts ComposeContainer.
Two of my tests inherit from this abstract class.
Testcontainers seems to run the ComposeContainer twice and it fails (when single test run it doesn't happen).
Even if I use singleton pattern, i got the same situation.
(see logs)
Any explanation appreciated.
Java config :
@ExtendWith(SpringExtension.class)
@SpringBootTest
@testcontainers
@ContextConfiguration(initializers = CommonIT.TestcontainersInitializer.class)
@activeprofiles("test")
@AutoConfigureMockMvc
@slf4j
public abstract class CommonIT {
@container
static ComposeContainer composeContainer = new ComposeContainer(
new File("src/test/resources/compose-test.yml"))
.withLocalCompose(true)
.withExposedService("oracle", 1521).withLogConsumer("oracle", new Slf4jLogConsumer(log))
.withExposedService("cassandra", 9042).withLogConsumer("cassandra", new Slf4jLogConsumer(log))
.withExposedService("keycloak", 8080).withLogConsumer("keycloak", new Slf4jLogConsumer(log));
Compose file :
services:
mailhog:
image: mailhog/mailhog
logging:
driver: 'none' # disable saving logs
ports:
- 1025:1025
- 8025:8025
oracle:
image: gvenzl/oracle-xe:21-slim-faststart
volumes:
- ./sql:/container-entrypoint-initdb.d
ports:
- 1521:1521
environment:
- ORACLE_RANDOM_PASSWORD=true
- APP_USER=FOO
- APP_USER_PASSWORD=BAR
cassandra:
image: cassandra:3.11.11
ports:
- 9042:9042
hostname: cassandra
environment:
- MAX_HEAP_SIZE=256M
- HEAP_NEWSIZE=128M
volumes:
- ./cassandra_init.sh:/cassandra_init.sh
entrypoint: /cassandra_init.sh
healthcheck:
test: ["CMD-SHELL", "[ $$(nodetool statusgossip) = running ]"]
interval: 10s
timeout: 10s
retries: 5
keycloak:
image: quay.io/keycloak/keycloak:latest
environment:
- KEYCLOAK_ADMIN=admin
- KEYCLOAK_ADMIN_PASSWORD=admin
command: start-dev --import-realm --http-relative-path=/auth
volumes:
- ./keycloak:/opt/keycloak/data/import
depends_on:
- oracle
- security
ports:
- 8080:8080
Relevant log output
2025-11-14T11:09:25.966+01:00 INFO --- [ Thread-2] tc.docker : Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint tcct3gyqcxkx-mailhog-1 (2172489997ff8c5d0d1b35a51ad95d92d5209bf05e361a8048706dad8ae83a49): Bind for 0.0.0.0:1025 failed: port is already allocated
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.318 s <<< FAILURE! -- in com.zpavel.ittests.it.CollecteControllerTest
[ERROR] com.zpavel.ittests.it.DetailControllerTest -- Time elapsed: 2.318 s <<< ERROR!
java.lang.ExceptionInInitializerError
at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
at java.base/java.lang.reflect.Field.acquireOverrideFieldAccessor(Field.java:1200)
at java.base/java.lang.reflect.Field.getOverrideFieldAccessor(Field.java:1169)
at java.base/java.lang.reflect.Field.get(Field.java:444)
at org.testcontainers.junit.jupiter.TestcontainersExtension.getContainerInstance(TestcontainersExtension.java:248)
at org.testcontainers.junit.jupiter.TestcontainersExtension.lambda$findSharedContainers$10(TestcontainersExtension.java:209)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at org.testcontainers.junit.jupiter.TestcontainersExtension.findSharedContainers(TestcontainersExtension.java:210)
at org.testcontainers.junit.jupiter.TestcontainersExtension.beforeAll(TestcontainersExtension.java:55)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.testcontainers.containers.ContainerLaunchException: Local Docker Compose exited abnormally with code 1 whilst running command: compose up -d
at org.testcontainers.containers.LocalDockerCompose.invoke(LocalDockerCompose.java:119)
at org.testcontainers.containers.ComposeDelegate.runWithCompose(ComposeDelegate.java:241)
at org.testcontainers.containers.ComposeDelegate.createServices(ComposeDelegate.java:163)
at org.testcontainers.containers.ComposeContainer.start(ComposeContainer.java:133)
at com.zpavel.ittests.CommonIT.<clinit>(CommonIT.java:52)
... 17 moreAdditional Information
No response