From a0cba699f84d1f8ae32db8bdf64ec651dc964a5d Mon Sep 17 00:00:00 2001 From: Haider Date: Sat, 2 May 2026 16:40:17 +0530 Subject: [PATCH] feat(mysql): support container-registry.oracle.com/mysql/community-server image MySQLContainer now natively accepts the official Oracle MySQL image without requiring .asCompatibleSubstituteFor(mysql). According to MySQL documentation, container-registry.oracle.com/mysql/community-server is the official Docker image of MySQL, not the docker.io/mysql image. Closes #9452 --- .../testcontainers/containers/MySQLContainer.java | 5 ++++- .../org/testcontainers/mysql/MySQLContainer.java | 4 +++- .../org/testcontainers/mysql/MySQLContainerTest.java | 12 ++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/modules/mysql/src/main/java/org/testcontainers/containers/MySQLContainer.java b/modules/mysql/src/main/java/org/testcontainers/containers/MySQLContainer.java index 36315b2fe48..3dbe03e7aed 100644 --- a/modules/mysql/src/main/java/org/testcontainers/containers/MySQLContainer.java +++ b/modules/mysql/src/main/java/org/testcontainers/containers/MySQLContainer.java @@ -22,6 +22,9 @@ public class MySQLContainer> extends JdbcDatab private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("mysql"); + private static final DockerImageName ORACLE_IMAGE_NAME = + DockerImageName.parse("container-registry.oracle.com/mysql/community-server"); + @Deprecated public static final String DEFAULT_TAG = "5.7.34"; @@ -58,7 +61,7 @@ public MySQLContainer(String dockerImageName) { public MySQLContainer(final DockerImageName dockerImageName) { super(dockerImageName); - dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME); + dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME, ORACLE_IMAGE_NAME); addExposedPort(MYSQL_PORT); } diff --git a/modules/mysql/src/main/java/org/testcontainers/mysql/MySQLContainer.java b/modules/mysql/src/main/java/org/testcontainers/mysql/MySQLContainer.java index 25f876c9911..e279f23acfa 100644 --- a/modules/mysql/src/main/java/org/testcontainers/mysql/MySQLContainer.java +++ b/modules/mysql/src/main/java/org/testcontainers/mysql/MySQLContainer.java @@ -20,6 +20,8 @@ public class MySQLContainer extends JdbcDatabaseContainer { public static final String NAME = "mysql"; private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("mysql"); + private static final DockerImageName ORACLE_IMAGE_NAME = + DockerImageName.parse("container-registry.oracle.com/mysql/community-server"); static final String DEFAULT_USER = "test"; @@ -43,7 +45,7 @@ public MySQLContainer(String dockerImageName) { public MySQLContainer(final DockerImageName dockerImageName) { super(dockerImageName); - dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME); + dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME, ORACLE_IMAGE_NAME); addExposedPort(MYSQL_PORT); } diff --git a/modules/mysql/src/test/java/org/testcontainers/mysql/MySQLContainerTest.java b/modules/mysql/src/test/java/org/testcontainers/mysql/MySQLContainerTest.java index ad78781db5c..479c43508eb 100644 --- a/modules/mysql/src/test/java/org/testcontainers/mysql/MySQLContainerTest.java +++ b/modules/mysql/src/test/java/org/testcontainers/mysql/MySQLContainerTest.java @@ -7,6 +7,7 @@ import org.testcontainers.containers.ContainerLaunchException; import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.db.AbstractContainerDatabaseTest; +import org.testcontainers.utility.DockerImageName; import java.io.File; import java.net.URL; @@ -28,6 +29,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assumptions.assumeThat; +import static org.assertj.core.api.Assertions.assertThatNoException; + class MySQLContainerTest extends AbstractContainerDatabaseTest { @@ -270,6 +273,15 @@ void testCustom() throws SQLException { } } + @Test + void shouldAcceptOracleImageName() { + DockerImageName oracleImage = DockerImageName + .parse("container-registry.oracle.com/mysql/community-server:8.0"); + + assertThatNoException() + .isThrownBy(() -> new MySQLContainer(oracleImage)); + } + private void assertHasCorrectExposedAndLivenessCheckPorts(MySQLContainer mysql) { assertThat(mysql.getExposedPorts()).containsExactly(MySQLContainer.MYSQL_PORT); assertThat(mysql.getLivenessCheckPortNumbers()).containsExactly(mysql.getMappedPort(MySQLContainer.MYSQL_PORT));