diff --git a/docs/modules/databases/db2.md b/docs/modules/databases/db2.md
index fde68a77afe..7a5ba79a86f 100644
--- a/docs/modules/databases/db2.md
+++ b/docs/modules/databases/db2.md
@@ -1,19 +1,17 @@
# DB2 Module
-Testcontainers module for [DB2](https://hub.docker.com/r/ibmcom/db2)
+Testcontainers module for [DB2](https://www.ibm.com/docs/en/db2/11.5.x?topic=deployments-db2-community-edition-docker)
## Usage example
You can start a DB2 container instance from any Java application by using:
-[Container definition](../../../modules/db2/src/test/java/org/testcontainers/junit/db2/SimpleDb2Test.java) inside_block:container
+[Container definition](../../../modules/db2/src/test/java/org/testcontainers/db2/Db2ContainerTest.java) inside_block:container
!!! warning "EULA Acceptance"
Due to licencing restrictions you are required to accept an EULA for this container image. To indicate that you accept the DB2 image EULA, call the `acceptLicense()` method, or place a file at the root of the classpath named `container-license-acceptance.txt`, e.g. at `src/test/resources/container-license-acceptance.txt`. This file should contain the line: `ibmcom/db2:11.5.0.0a` (or, if you are overriding the docker image name/tag, update accordingly).
-
- Please see the [`ibmcom/db2` image documentation](https://hub.docker.com/r/ibmcom/db2) for a link to the EULA document.
See [Database containers](./index.md) for documentation and usage that is common to all relational database container types.
diff --git a/modules/db2/src/main/java/org/testcontainers/containers/Db2Container.java b/modules/db2/src/main/java/org/testcontainers/containers/Db2Container.java
index 18fb4aac0e6..9f5b9dfde89 100644
--- a/modules/db2/src/main/java/org/testcontainers/containers/Db2Container.java
+++ b/modules/db2/src/main/java/org/testcontainers/containers/Db2Container.java
@@ -18,7 +18,9 @@
*
+ * @deprecated use {@link org.testcontainers.db2.Db2Container} instead.
*/
+@Deprecated
public class Db2Container extends JdbcDatabaseContainer {
public static final String NAME = "db2";
diff --git a/modules/db2/src/main/java/org/testcontainers/db2/Db2Container.java b/modules/db2/src/main/java/org/testcontainers/db2/Db2Container.java
new file mode 100644
index 00000000000..bdd182599e5
--- /dev/null
+++ b/modules/db2/src/main/java/org/testcontainers/db2/Db2Container.java
@@ -0,0 +1,143 @@
+package org.testcontainers.db2;
+
+import com.github.dockerjava.api.model.Capability;
+import org.testcontainers.containers.JdbcDatabaseContainer;
+import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.utility.DockerImageName;
+import org.testcontainers.utility.LicenseAcceptance;
+
+import java.time.Duration;
+import java.util.Set;
+
+/**
+ * Testcontainers implementation for IBM DB2.
+ *
+ * Supported images: {@code icr.io/db2_community/db2}, {@code ibmcom/db2}
+ *
+ * Exposed ports:
+ *
+ */
+public class Db2Container extends JdbcDatabaseContainer {
+
+ public static final String NAME = "db2";
+
+ private static final DockerImageName DEFAULT_NEW_IMAGE_NAME = DockerImageName.parse("icr.io/db2_community/db2");
+
+ public static final int DB2_PORT = 50000;
+
+ private String databaseName = "test";
+
+ private String username = "db2inst1";
+
+ private String password = "foobar1234";
+
+ public Db2Container(String dockerImageName) {
+ this(DockerImageName.parse(dockerImageName));
+ }
+
+ public Db2Container(final DockerImageName dockerImageName) {
+ super(dockerImageName);
+ dockerImageName.assertCompatibleWith(DEFAULT_NEW_IMAGE_NAME);
+
+ withCreateContainerCmdModifier(cmd -> cmd.withCapAdd(Capability.IPC_LOCK).withCapAdd(Capability.IPC_OWNER));
+ waitingFor(Wait.forLogMessage(".*Setup has completed\\..*", 1).withStartupTimeout(Duration.ofMinutes(10)));
+
+ addExposedPort(DB2_PORT);
+ }
+
+ /**
+ * @return the ports on which to check if the container is ready
+ * @deprecated use {@link #getLivenessCheckPortNumbers()} instead
+ */
+ @Override
+ @Deprecated
+ protected Set getLivenessCheckPorts() {
+ return super.getLivenessCheckPorts();
+ }
+
+ @Override
+ protected void configure() {
+ // If license was not accepted programmatically, check if it was accepted via resource file
+ if (!getEnvMap().containsKey("LICENSE")) {
+ LicenseAcceptance.assertLicenseAccepted(this.getDockerImageName());
+ acceptLicense();
+ }
+
+ addEnv("DBNAME", databaseName);
+ addEnv("DB2INSTANCE", username);
+ addEnv("DB2INST1_PASSWORD", password);
+
+ // These settings help the DB2 container start faster
+ if (!getEnvMap().containsKey("AUTOCONFIG")) {
+ addEnv("AUTOCONFIG", "false");
+ }
+ if (!getEnvMap().containsKey("ARCHIVE_LOGS")) {
+ addEnv("ARCHIVE_LOGS", "false");
+ }
+ }
+
+ /**
+ * Accepts the license for the DB2 container by setting the LICENSE=accept
+ * variable as described at https://hub.docker.com/r/ibmcom/db2
+ */
+ public Db2Container acceptLicense() {
+ addEnv("LICENSE", "accept");
+ return this;
+ }
+
+ @Override
+ public String getDriverClassName() {
+ return "com.ibm.db2.jcc.DB2Driver";
+ }
+
+ @Override
+ public String getJdbcUrl() {
+ String additionalUrlParams = constructUrlParameters(":", ";", ";");
+ return "jdbc:db2://" + getHost() + ":" + getMappedPort(DB2_PORT) + "/" + databaseName + additionalUrlParams;
+ }
+
+ @Override
+ public String getUsername() {
+ return username;
+ }
+
+ @Override
+ public String getPassword() {
+ return password;
+ }
+
+ @Override
+ public String getDatabaseName() {
+ return databaseName;
+ }
+
+ @Override
+ public Db2Container withUsername(String username) {
+ this.username = username;
+ return this;
+ }
+
+ @Override
+ public Db2Container withPassword(String password) {
+ this.password = password;
+ return this;
+ }
+
+ @Override
+ public Db2Container withDatabaseName(String dbName) {
+ this.databaseName = dbName;
+ return this;
+ }
+
+ @Override
+ protected void waitUntilContainerStarted() {
+ getWaitStrategy().waitUntilReady(this);
+ }
+
+ @Override
+ protected String getTestQueryString() {
+ return "SELECT 1 FROM SYSIBM.SYSDUMMY1";
+ }
+}
diff --git a/modules/db2/src/test/java/org/testcontainers/Db2TestImages.java b/modules/db2/src/test/java/org/testcontainers/Db2TestImages.java
index b0bfc869272..002d030b1c5 100644
--- a/modules/db2/src/test/java/org/testcontainers/Db2TestImages.java
+++ b/modules/db2/src/test/java/org/testcontainers/Db2TestImages.java
@@ -3,5 +3,5 @@
import org.testcontainers.utility.DockerImageName;
public interface Db2TestImages {
- DockerImageName DB2_IMAGE = DockerImageName.parse("ibmcom/db2:11.5.0.0a");
+ DockerImageName DB2_IMAGE = DockerImageName.parse("icr.io/db2_community/db2:11.5.8.0");
}
diff --git a/modules/db2/src/test/java/org/testcontainers/junit/db2/SimpleDb2Test.java b/modules/db2/src/test/java/org/testcontainers/db2/Db2ContainerTest.java
similarity index 88%
rename from modules/db2/src/test/java/org/testcontainers/junit/db2/SimpleDb2Test.java
rename to modules/db2/src/test/java/org/testcontainers/db2/Db2ContainerTest.java
index 95222330e09..6b17d1583f7 100644
--- a/modules/db2/src/test/java/org/testcontainers/junit/db2/SimpleDb2Test.java
+++ b/modules/db2/src/test/java/org/testcontainers/db2/Db2ContainerTest.java
@@ -1,8 +1,7 @@
-package org.testcontainers.junit.db2;
+package org.testcontainers.db2;
import org.junit.jupiter.api.Test;
import org.testcontainers.Db2TestImages;
-import org.testcontainers.containers.Db2Container;
import org.testcontainers.db.AbstractContainerDatabaseTest;
import java.sql.ResultSet;
@@ -10,12 +9,12 @@
import static org.assertj.core.api.Assertions.assertThat;
-class SimpleDb2Test extends AbstractContainerDatabaseTest {
+class Db2ContainerTest extends AbstractContainerDatabaseTest {
@Test
void testSimple() throws SQLException {
try ( // container {
- Db2Container db2 = new Db2Container("ibmcom/db2:11.5.0.0a").acceptLicense()
+ Db2Container db2 = new Db2Container("icr.io/db2_community/db2:11.5.8.0").acceptLicense()
// }
) {
db2.start();