diff --git a/docs/modules/minio.md b/docs/modules/minio.md
index 165f760425c..0071a05c9d5 100644
--- a/docs/modules/minio.md
+++ b/docs/modules/minio.md
@@ -6,17 +6,17 @@ Testcontainers can be used to automatically instantiate and manage [MinIO](https
Create a `MinIOContainer` to use it in your tests:
-[Starting a MinIO container](../../modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java) inside_block:minioContainer
+[Starting a MinIO container](../../modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java) inside_block:minioContainer
The [MinIO Java client](https://min.io/docs/minio/linux/developers/java/API.html) can be configured with the container as such:
-[Configuring a MinIO client](../../modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java) inside_block:configuringClient
+[Configuring a MinIO client](../../modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java) inside_block:configuringClient
If needed the username and password can be overridden as such:
-[Overriding a MinIO container](../../modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java) inside_block:minioOverrides
+[Overriding a MinIO container](../../modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java) inside_block:minioOverrides
## Adding this module to your project dependencies
diff --git a/modules/minio/src/main/java/org/testcontainers/containers/MinIOContainer.java b/modules/minio/src/main/java/org/testcontainers/containers/MinIOContainer.java
index dfd499194ef..1b0d668e1c8 100644
--- a/modules/minio/src/main/java/org/testcontainers/containers/MinIOContainer.java
+++ b/modules/minio/src/main/java/org/testcontainers/containers/MinIOContainer.java
@@ -16,6 +16,8 @@
*
S3: 9000
* Console: 9001
*
+ *
+ * @deprecated use {@link org.testcontainers.minio.MinIOContainer} instead.
*/
public class MinIOContainer extends GenericContainer {
diff --git a/modules/minio/src/main/java/org/testcontainers/minio/MinIOContainer.java b/modules/minio/src/main/java/org/testcontainers/minio/MinIOContainer.java
new file mode 100644
index 00000000000..1ff01802830
--- /dev/null
+++ b/modules/minio/src/main/java/org/testcontainers/minio/MinIOContainer.java
@@ -0,0 +1,119 @@
+package org.testcontainers.minio;
+
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.utility.DockerImageName;
+
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+
+/**
+ * Testcontainers implementation for MinIO.
+ *
+ * Supported image: {@code minio/minio}
+ *
+ * Exposed ports:
+ *
+ * - S3: 9000
+ * - Console: 9001
+ *
+ */
+public class MinIOContainer extends GenericContainer {
+
+ private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("minio/minio");
+
+ private static final int MINIO_S3_PORT = 9000;
+
+ private static final int MINIO_UI_PORT = 9001;
+
+ private static final String DEFAULT_USER = "minioadmin";
+
+ private static final String DEFAULT_PASSWORD = "minioadmin";
+
+ private String userName;
+
+ private String password;
+
+ /**
+ * Constructs a MinIO container from the dockerImageName
+ * @param dockerImageName the full image name to use
+ */
+ public MinIOContainer(final String dockerImageName) {
+ this(DockerImageName.parse(dockerImageName));
+ }
+
+ /**
+ * Constructs a MinIO container from the dockerImageName
+ * @param dockerImageName the full image name to use
+ */
+ public MinIOContainer(final DockerImageName dockerImageName) {
+ super(dockerImageName);
+ dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
+ withExposedPorts(MINIO_S3_PORT, MINIO_UI_PORT);
+ withCommand("server", "--console-address", ":" + MINIO_UI_PORT, "/data");
+ waitingFor(
+ Wait
+ .forHttp("/minio/health/live")
+ .forPort(MINIO_S3_PORT)
+ .withStartupTimeout(Duration.of(60, ChronoUnit.SECONDS))
+ );
+ }
+
+ /**
+ * Overrides the DEFAULT_USER
+ * @param userName the Root user to override
+ * @return this
+ */
+ public MinIOContainer withUserName(String userName) {
+ this.userName = userName;
+ return this;
+ }
+
+ /**
+ * Overrides the DEFAULT_PASSWORD
+ * @param password the Root user's password to override
+ * @return this
+ */
+ public MinIOContainer withPassword(String password) {
+ this.password = password;
+ return this;
+ }
+
+ /**
+ * Configures the MinIO container
+ */
+ @Override
+ public void configure() {
+ if (this.userName != null) {
+ addEnv("MINIO_ROOT_USER", this.userName);
+ } else {
+ this.userName = DEFAULT_USER;
+ }
+ if (this.password != null) {
+ addEnv("MINIO_ROOT_PASSWORD", this.password);
+ } else {
+ this.password = DEFAULT_PASSWORD;
+ }
+ }
+
+ /**
+ * @return the URL to upload/download objects from
+ */
+ public String getS3URL() {
+ return String.format("http://%s:%s", this.getHost(), getMappedPort(MINIO_S3_PORT));
+ }
+
+ /**
+ * @return the Username for the Root user
+ */
+ public String getUserName() {
+ return this.userName;
+ }
+
+ /**
+ * @return the password for the Root user
+ */
+ public String getPassword() {
+ return this.password;
+ }
+}
diff --git a/modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java b/modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java
similarity index 98%
rename from modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java
rename to modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java
index 0998243de8e..5c3531042cf 100644
--- a/modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java
+++ b/modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java
@@ -1,4 +1,4 @@
-package org.testcontainers.containers;
+package org.testcontainers.minio;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;