Skip to content

Commit 45ce1bc

Browse files
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
1 parent 0d5a9e2 commit 45ce1bc

3 files changed

Lines changed: 19 additions & 2 deletions

File tree

modules/mysql/src/main/java/org/testcontainers/containers/MySQLContainer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ public class MySQLContainer<SELF extends MySQLContainer<SELF>> extends JdbcDatab
2222

2323
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("mysql");
2424

25+
private static final DockerImageName ORACLE_IMAGE_NAME =
26+
DockerImageName.parse("container-registry.oracle.com/mysql/community-server");
27+
2528
@Deprecated
2629
public static final String DEFAULT_TAG = "5.7.34";
2730

@@ -58,7 +61,7 @@ public MySQLContainer(String dockerImageName) {
5861

5962
public MySQLContainer(final DockerImageName dockerImageName) {
6063
super(dockerImageName);
61-
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
64+
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME, ORACLE_IMAGE_NAME);
6265

6366
addExposedPort(MYSQL_PORT);
6467
}

modules/mysql/src/main/java/org/testcontainers/mysql/MySQLContainer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public class MySQLContainer extends JdbcDatabaseContainer<MySQLContainer> {
2020
public static final String NAME = "mysql";
2121

2222
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("mysql");
23+
private static final DockerImageName ORACLE_IMAGE_NAME =
24+
DockerImageName.parse("container-registry.oracle.com/mysql/community-server");
2325

2426
static final String DEFAULT_USER = "test";
2527

@@ -43,7 +45,7 @@ public MySQLContainer(String dockerImageName) {
4345

4446
public MySQLContainer(final DockerImageName dockerImageName) {
4547
super(dockerImageName);
46-
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
48+
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME, ORACLE_IMAGE_NAME);
4749

4850
addExposedPort(MYSQL_PORT);
4951
}

modules/mysql/src/test/java/org/testcontainers/mysql/MySQLContainerTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.testcontainers.containers.ContainerLaunchException;
88
import org.testcontainers.containers.output.Slf4jLogConsumer;
99
import org.testcontainers.db.AbstractContainerDatabaseTest;
10+
import org.testcontainers.utility.DockerImageName;
1011

1112
import java.io.File;
1213
import java.net.URL;
@@ -28,6 +29,8 @@
2829
import static org.assertj.core.api.Assertions.assertThat;
2930
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3031
import static org.assertj.core.api.Assumptions.assumeThat;
32+
import static org.assertj.core.api.Assertions.assertThatNoException;
33+
3134

3235
class MySQLContainerTest extends AbstractContainerDatabaseTest {
3336

@@ -270,6 +273,15 @@ void testCustom() throws SQLException {
270273
}
271274
}
272275

276+
@Test
277+
void shouldAcceptOracleImageName() {
278+
DockerImageName oracleImage = DockerImageName
279+
.parse("container-registry.oracle.com/mysql/community-server:8.0");
280+
281+
assertThatNoException()
282+
.isThrownBy(() -> new MySQLContainer(oracleImage));
283+
}
284+
273285
private void assertHasCorrectExposedAndLivenessCheckPorts(MySQLContainer mysql) {
274286
assertThat(mysql.getExposedPorts()).containsExactly(MySQLContainer.MYSQL_PORT);
275287
assertThat(mysql.getLivenessCheckPortNumbers()).containsExactly(mysql.getMappedPort(MySQLContainer.MYSQL_PORT));

0 commit comments

Comments
 (0)