Add detection for Bitnami Legacy images

This commit also adjusts the tests to use bitnamilegacy images because we have no way to test against the original bitnami images.

Closes gh-46983
This commit is contained in:
Moritz Halbritter
2025-09-19 10:18:59 +02:00
parent 630bb335ea
commit 4a1de8534f
17 changed files with 42 additions and 35 deletions
@@ -32,7 +32,8 @@ import org.springframework.boot.docker.compose.service.connection.DockerComposeC
class CassandraDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<CassandraConnectionDetails> {
private static final String[] CASSANDRA_CONTAINER_NAMES = { "cassandra", "bitnami/cassandra" };
private static final String[] CASSANDRA_CONTAINER_NAMES = { "cassandra", "bitnami/cassandra",
"bitnamilegacy/cassandra" };
private static final int CASSANDRA_PORT = 9042;
@@ -31,7 +31,8 @@ import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBu
class ClickHouseJdbcDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
private static final String[] CLICKHOUSE_CONTAINER_NAMES = { "clickhouse/clickhouse-server", "bitnami/clickhouse" };
private static final String[] CLICKHOUSE_CONTAINER_NAMES = { "clickhouse/clickhouse-server", "bitnami/clickhouse",
"bitnamilegacy/clickhouse" };
protected ClickHouseJdbcDockerComposeConnectionDetailsFactory() {
super(CLICKHOUSE_CONTAINER_NAMES);
@@ -33,7 +33,8 @@ import org.springframework.boot.docker.compose.service.connection.r2dbc.Connecti
class ClickHouseR2dbcDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<R2dbcConnectionDetails> {
private static final String[] CLICKHOUSE_CONTAINER_NAMES = { "clickhouse/clickhouse-server", "bitnami/clickhouse" };
private static final String[] CLICKHOUSE_CONTAINER_NAMES = { "clickhouse/clickhouse-server", "bitnami/clickhouse",
"bitnamilegacy/clickhouse" };
ClickHouseR2dbcDockerComposeConnectionDetailsFactory() {
super(CLICKHOUSE_CONTAINER_NAMES, "io.r2dbc.spi.ConnectionFactoryOptions");
@@ -36,7 +36,8 @@ import org.springframework.boot.docker.compose.service.connection.DockerComposeC
class ElasticsearchDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<ElasticsearchConnectionDetails> {
private static final String[] ELASTICSEARCH_CONTAINER_NAMES = { "elasticsearch", "bitnami/elasticsearch" };
private static final String[] ELASTICSEARCH_CONTAINER_NAMES = { "elasticsearch", "bitnami/elasticsearch",
"bitnamilegacy/elasticsearch" };
private static final int ELASTICSEARCH_PORT = 9200;
@@ -34,7 +34,7 @@ import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBu
class MariaDbJdbcDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
private static final String[] MARIADB_CONTAINER_NAMES = { "mariadb", "bitnami/mariadb" };
private static final String[] MARIADB_CONTAINER_NAMES = { "mariadb", "bitnami/mariadb", "bitnamilegacy/mariadb" };
protected MariaDbJdbcDockerComposeConnectionDetailsFactory() {
super(MARIADB_CONTAINER_NAMES);
@@ -36,7 +36,7 @@ import org.springframework.boot.docker.compose.service.connection.r2dbc.Connecti
class MariaDbR2dbcDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<R2dbcConnectionDetails> {
private static final String[] MARIADB_CONTAINER_NAMES = { "mariadb", "bitnami/mariadb" };
private static final String[] MARIADB_CONTAINER_NAMES = { "mariadb", "bitnami/mariadb", "bitnamilegacy/mariadb" };
MariaDbR2dbcDockerComposeConnectionDetailsFactory() {
super(MARIADB_CONTAINER_NAMES, "io.r2dbc.spi.ConnectionFactoryOptions");
@@ -34,7 +34,7 @@ import org.springframework.boot.docker.compose.service.connection.DockerComposeC
*/
class MongoDockerComposeConnectionDetailsFactory extends DockerComposeConnectionDetailsFactory<MongoConnectionDetails> {
private static final String[] MONGODB_CONTAINER_NAMES = { "mongo", "bitnami/mongodb" };
private static final String[] MONGODB_CONTAINER_NAMES = { "mongo", "bitnami/mongodb", "bitnamilegacy/mongodb" };
private static final int MONGODB_PORT = 27017;
@@ -34,7 +34,7 @@ import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBu
class MySqlJdbcDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
private static final String[] MYSQL_CONTAINER_NAMES = { "mysql", "bitnami/mysql" };
private static final String[] MYSQL_CONTAINER_NAMES = { "mysql", "bitnami/mysql", "bitnamilegacy/mysql" };
protected MySqlJdbcDockerComposeConnectionDetailsFactory() {
super(MYSQL_CONTAINER_NAMES);
@@ -36,7 +36,7 @@ import org.springframework.boot.docker.compose.service.connection.r2dbc.Connecti
class MySqlR2dbcDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<R2dbcConnectionDetails> {
private static final String[] MYSQL_CONTAINER_NAMES = { "mysql", "bitnami/mysql" };
private static final String[] MYSQL_CONTAINER_NAMES = { "mysql", "bitnami/mysql", "bitnamilegacy/mysql" };
MySqlR2dbcDockerComposeConnectionDetailsFactory() {
super(MYSQL_CONTAINER_NAMES, "io.r2dbc.spi.ConnectionFactoryOptions");
@@ -34,7 +34,7 @@ import org.springframework.boot.docker.compose.service.connection.DockerComposeC
*/
class Neo4jDockerComposeConnectionDetailsFactory extends DockerComposeConnectionDetailsFactory<Neo4jConnectionDetails> {
private static final String[] NEO4J_CONTAINER_NAMES = { "neo4j", "bitnami/neo4j" };
private static final String[] NEO4J_CONTAINER_NAMES = { "neo4j", "bitnami/neo4j", "bitnamilegacy/neo4j" };
Neo4jDockerComposeConnectionDetailsFactory() {
super(NEO4J_CONTAINER_NAMES);
@@ -34,7 +34,8 @@ import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBu
class PostgresJdbcDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
private static final String[] POSTGRES_CONTAINER_NAMES = { "postgres", "bitnami/postgresql" };
private static final String[] POSTGRES_CONTAINER_NAMES = { "postgres", "bitnami/postgresql",
"bitnamilegacy/postgresql" };
protected PostgresJdbcDockerComposeConnectionDetailsFactory() {
super(POSTGRES_CONTAINER_NAMES);
@@ -36,7 +36,8 @@ import org.springframework.boot.docker.compose.service.connection.r2dbc.Connecti
class PostgresR2dbcDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<R2dbcConnectionDetails> {
private static final String[] POSTGRES_CONTAINER_NAMES = { "postgres", "bitnami/postgresql" };
private static final String[] POSTGRES_CONTAINER_NAMES = { "postgres", "bitnami/postgresql",
"bitnamilegacy/postgresql" };
PostgresR2dbcDockerComposeConnectionDetailsFactory() {
super(POSTGRES_CONTAINER_NAMES, "io.r2dbc.spi.ConnectionFactoryOptions");
@@ -35,7 +35,8 @@ import org.springframework.boot.docker.compose.service.connection.DockerComposeC
class RabbitDockerComposeConnectionDetailsFactory
extends DockerComposeConnectionDetailsFactory<RabbitConnectionDetails> {
private static final String[] RABBITMQ_CONTAINER_NAMES = { "rabbitmq", "bitnami/rabbitmq" };
private static final String[] RABBITMQ_CONTAINER_NAMES = { "rabbitmq", "bitnami/rabbitmq",
"bitnamilegacy/rabbitmq" };
private static final int RABBITMQ_PORT = 5672;
@@ -33,8 +33,8 @@ import org.springframework.boot.docker.compose.service.connection.DockerComposeC
*/
class RedisDockerComposeConnectionDetailsFactory extends DockerComposeConnectionDetailsFactory<RedisConnectionDetails> {
private static final String[] REDIS_CONTAINER_NAMES = { "redis", "bitnami/redis", "redis/redis-stack",
"redis/redis-stack-server" };
private static final String[] REDIS_CONTAINER_NAMES = { "redis", "bitnami/redis", "bitnamilegacy/redis",
"redis/redis-stack", "redis/redis-stack-server" };
private static final int REDIS_PORT = 6379;
@@ -90,25 +90,25 @@ The following service connections are currently supported:
| Containers named "apache/activemq-artemis"
| javadoc:org.springframework.boot.autoconfigure.cassandra.CassandraConnectionDetails[]
| Containers named "cassandra" or "bitnami/cassandra"
| Containers named "cassandra", "bitnami/cassandra" or "bitnamilegacy/cassandra"
| javadoc:org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchConnectionDetails[]
| Containers named "elasticsearch" or "bitnami/elasticsearch"
| Containers named "elasticsearch", "bitnami/elasticsearch" or "bitnamilegacy/elasticsearch"
| javadoc:org.springframework.boot.autoconfigure.hazelcast.HazelcastConnectionDetails[]
| Containers named "hazelcast/hazelcast".
| javadoc:org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails[]
| Containers named "clickhouse/clickhouse-server", "bitnami/clickhouse", "gvenzl/oracle-free", "gvenzl/oracle-xe", "mariadb", "bitnami/mariadb", "mssql/server", "mysql", "bitnami/mysql", "postgres", or "bitnami/postgresql"
| Containers named "clickhouse/clickhouse-server", "bitnami/clickhouse", "bitnamilegacy/clickhouse", "gvenzl/oracle-free", "gvenzl/oracle-xe", "mariadb", "bitnami/mariadb", "bitnamilegacy/mariadb", "mssql/server", "mysql", "bitnami/mysql", "bitnamilegacy/mysql", "postgres", "bitnami/postgresql" or "bitnamilegacy/postgresql"
| javadoc:org.springframework.boot.autoconfigure.ldap.LdapConnectionDetails[]
| Containers named "osixia/openldap"
| javadoc:org.springframework.boot.autoconfigure.mongo.MongoConnectionDetails[]
| Containers named "mongo" or "bitnami/mongodb"
| Containers named "mongo", "bitnami/mongodb" or "bitnamilegacy/mongodb"
| javadoc:org.springframework.boot.autoconfigure.neo4j.Neo4jConnectionDetails[]
| Containers named "neo4j" or "bitnami/neo4j"
| Containers named "neo4j", "bitnami/neo4j" or "bitnamilegacy/neo4j"
| javadoc:org.springframework.boot.actuate.autoconfigure.logging.otlp.OtlpLoggingConnectionDetails[]
| Containers named "otel/opentelemetry-collector-contrib", "grafana/otel-lgtm"
@@ -123,13 +123,13 @@ The following service connections are currently supported:
| Containers named "apachepulsar/pulsar"
| javadoc:org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails[]
| Containers named "clickhouse/clickhouse-server", "bitnami/clickhouse", "gvenzl/oracle-free", "gvenzl/oracle-xe", "mariadb", "bitnami/mariadb", "mssql/server", "mysql", "bitnami/mysql", "postgres", or "bitnami/postgresql"
| Containers named "clickhouse/clickhouse-server", "bitnami/clickhouse", "bitnamilegacy/clickhouse", "gvenzl/oracle-free", "gvenzl/oracle-xe", "mariadb", "bitnami/mariadb", "bitnamilegacy/mariadb", "mssql/server", "mysql", "bitnami/mysql", "bitnamilegacy/mysql", "postgres", "bitnami/postgresql" or "bitnamilegacy/postgresql"
| javadoc:org.springframework.boot.autoconfigure.amqp.RabbitConnectionDetails[]
| Containers named "rabbitmq" or "bitnami/rabbitmq"
| Containers named "rabbitmq", "bitnami/rabbitmq" or "bitnamilegacy/rabbitmq"
| javadoc:org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails[]
| Containers named "redis", "bitnami/redis", "redis/redis-stack" or "redis/redis-stack-server"
| Containers named "redis", "bitnami/redis", "bitnamilegacy/redis", "redis/redis-stack" or "redis/redis-stack-server"
| javadoc:org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConnectionDetails[]
| Containers named "openzipkin/zipkin".
@@ -41,8 +41,8 @@ import org.springframework.boot.testcontainers.service.connection.ServiceConnect
class RedisContainerConnectionDetailsFactory
extends ContainerConnectionDetailsFactory<Container<?>, RedisConnectionDetails> {
private static final List<String> REDIS_IMAGE_NAMES = List.of("redis", "bitnami/redis", "redis/redis-stack",
"redis/redis-stack-server");
private static final List<String> REDIS_IMAGE_NAMES = List.of("redis", "bitnami/redis", "bitnamilegacy/redis",
"redis/redis-stack", "redis/redis-stack-server");
private static final int REDIS_PORT = 6379;
@@ -263,52 +263,52 @@ public enum TestImage {
/**
* A container image suitable for testing Cassandra via Bitnami.
*/
BITNAMI_CASSANDRA("bitnami/cassandra", "4.1.3"),
BITNAMI_CASSANDRA("bitnamilegacy/cassandra", "4.1.3"),
/**
* A container image suitable for testing ClickHouse via Bitnami.
*/
BITNAMI_CLICKHOUSE("bitnami/clickhouse", "24.3"),
BITNAMI_CLICKHOUSE("bitnamilegacy/clickhouse", "24.3"),
/**
* A container image suitable for testing Elasticsearch via Bitnami.
*/
BITNAMI_ELASTICSEARCH("bitnami/elasticsearch", "8.12.1"),
BITNAMI_ELASTICSEARCH("bitnamilegacy/elasticsearch", "8.12.1"),
/**
* A container image suitable for testing MariaDB via Bitnami.
*/
BITNAMI_MARIADB("bitnami/mariadb", "11.2.3"),
BITNAMI_MARIADB("bitnamilegacy/mariadb", "11.2.3"),
/**
* A container image suitable for testing MongoDB via Bitnami.
*/
BITNAMI_MONGODB("bitnami/mongodb", "7.0.5"),
BITNAMI_MONGODB("bitnamilegacy/mongodb", "7.0.5"),
/**
* A container image suitable for testing MySQL via Bitnami.
*/
BITNAMI_MYSQL("bitnami/mysql", "8.0.36"),
BITNAMI_MYSQL("bitnamilegacy/mysql", "8.0.36"),
/**
* A container image suitable for testing Neo4j via Bitnami.
*/
BITNAMI_NEO4J("bitnami/neo4j", "5.16.0"),
BITNAMI_NEO4J("bitnamilegacy/neo4j", "5.16.0"),
/**
* A container image suitable for testing Postgres via Bitnami.
*/
BITNAMI_POSTGRESQL("bitnami/postgresql", "16.2.0"),
BITNAMI_POSTGRESQL("bitnamilegacy/postgresql", "16.2.0"),
/**
* A container image suitable for testing RabbitMQ via Bitnami.
*/
BITNAMI_RABBITMQ("bitnami/rabbitmq", "3.11.28"),
BITNAMI_RABBITMQ("bitnamilegacy/rabbitmq", "3.11.28"),
/**
* A container image suitable for testing Redis via Bitnami.
*/
BITNAMI_REDIS("bitnami/redis", "7.2.4");
BITNAMI_REDIS("bitnamilegacy/redis", "7.2.4");
private final String name;