Skip to content

[Bug]: #11224

@ZPavel

Description

@ZPavel

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 ecc6942

What 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 more

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions