spring 使用不同的默认端口配置Minio测试容器

oiopk7p5  于 2023-01-12  发布在  Spring
关注(0)|答案(1)|浏览(186)

简要总结:如何更改在测试容器中运行的迷你客户端的默认端口?

我想在我的应用程序中使用minio作为测试容器,当我在本地启动它时,它已经工作了。下面是我用来运行测试容器的代码片段:

public class MinioContainer extends GenericContainer<MinioContainer> {

    private static final int DEFAULT_PORT = 9000;
    private static final String DEFAULT_IMAGE = "/minio/minio";
    private static final String DEFAULT_TAG = "latest";

    private static final String MINIO_ACCESS_KEY = "MINIO_ACCESS_KEY";
    private static final String MINIO_SECRET_KEY = "MINIO_SECRET_KEY";

    private static final String DEFAULT_STORAGE_DIRECTORY = "/data";
    private static final String HEALTH_ENDPOINT = "/minio/health/ready";

    public MinioContainer() {

        this(DEFAULT_IMAGE + ":" + DEFAULT_TAG);
    }

    public MinioContainer(String image) {

        super(image == null ? DEFAULT_IMAGE + ":" + DEFAULT_TAG : image);
        Network network = Network.newNetwork();
        withNetwork(network);
        withNetworkAliases("minio-" + Base58.randomString(6));
        addExposedPort(DEFAULT_PORT);
        withEnv(MINIO_ACCESS_KEY, "access_key");
        withEnv(MINIO_SECRET_KEY, "secret_key");
        withCommand("server", DEFAULT_STORAGE_DIRECTORY);
        setWaitStrategy(new HttpWaitStrategy()
                .forPort(DEFAULT_PORT)
                .forPath(HEALTH_ENDPOINT)
                .withStartupTimeout(Duration.ofMinutes(1)));
    }

    public String getHostAddress() {

        return getHost() + ":" + getMappedPort(DEFAULT_PORT);
    }
}

当我在集群上部署这个程序时,在集群的端口9000上也运行了一个minio容器,它在控制台中显示了这个错误消息:

io.minio.errors.ErrorResponseException: The Access Key Id you provided does not exist in our records.
    at some.package.MinioTest.setup(MinioTest.java:58)

在我的测试中,我使用这个容器运行了一个SpringBootTest,并注入了我的minio客户端。我还配置了一个测试应用程序yaml,这样我就可以使用一个活动的测试配置文件运行我的测试。错误发生在以下代码片段中:

private final String BUCKET = "bucket";
....

@BeforeEach
void setup() {
    boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(BUCKET).build());
...
}

是否有办法更改我的MinioContainer上的DEFAULT_PORT,使其与已在群集上运行的Minio Container的端口不同?由于此问题,我无法在我们的管道上运行测试,此问题仅发生在我们的群集上。
只要我将MinioContainer上的DEFAULT_PORT更改为不同于9000的值,容器就会停止工作,因为它无法找到HEALTH_ENDPOINT,因此整个容器都会停止工作。
我希望我把我的问题解释得足够清楚。如果没有,请告诉我,这样我就可以试着解释得更清楚。我已经对这个问题完全失望了。
BR空

omqzjyyz

omqzjyyz1#

我找到了问题的解决方案。Minio支持以下命令:
"server /data --address :9100"
现在我可以像这样生成我的测试容器了:

public static GenericContainer<?> minioContainer = new GenericContainer<>(MINIO_IMAGE)
            .withCommand("server /data --address :9100")
            .withExposedPorts(9100);

现在,我的测试中的MinioContainer使用端口9100运行。
希望我能帮助其他人解决这个问题。

相关问题