【发布时间】:2019-08-19 12:28:39
【问题描述】:
我的应用程序使用 Minio 进行 S3 兼容的对象存储,我想通过 Testcontainers 在我的集成测试中使用 Minio docker 映像。
对于一些非常基本的测试,我使用minio/minio docker 映像运行 GenericContainer,除了MINIO_ACCESS_KEY 和MINIO_SECRET_KEY 之外没有任何配置。然后我的测试使用 Minio 的Java Client SDK。这些工作正常,表现与预期一样。
但是对于其他集成测试,我需要在 Mino 中设置单独的用户。据我所知,用户只能使用Admin API添加到Minio,没有Java客户端,只有minio/mc docker镜像(mc CLI在minio/minio docker中不可用用于服务器的图像)。
在命令行上,我可以像这样使用 Admin API:
$ docker run --interactive --tty --detach --entrypoint=/bin/sh --name minio_admin minio/mc
--interactive --tty 有点像保持容器运行的技巧,所以我以后可以运行类似这样的命令:
$ docker exec --interactive --tty minio_admin mc admin user add ...
使用 Testcontainers,我尝试这样做:
public void testAdminApi() throws Exception {
GenericContainer mc = new GenericContainer("minio/mc")
.withCommand("/bin/sh")
.withCreateContainerCmdModifier(new Consumer<CreateContainerCmd>() {
@Override
public void accept(CreateContainerCmd cmd) {
cmd
.withAttachStdin(true)
.withStdinOpen(true)
.withTty(true);
}
});
mc.start();
log.info("mc is running: {}", mc.isRunning());
String command = "mc";
Container.ExecResult result = mc.execInContainer(command);
log.info("Executing command '{}' returned exit code '{}' and stdout '{}'", command, result.getExitCode(), result.getStdout());
assertEquals(0, result.getExitCode());
}
日志显示容器正在启动,但对其执行命令返回退出代码 126 并声称它处于停止状态:
[minio/mc:latest] - Starting container with ID: 4f96fc7583fe62290925472c4c6b329fbeb7a55b38a3c0ad41ee797db1431841
[minio/mc:latest] - Container minio/mc:latest is starting: 4f96fc7583fe62290925472c4c6b329fbeb7a55b38a3c0ad41ee797db1431841
[minio/mc:latest] - Container minio/mc:latest started
minio.MinioAdminTests - mc is running: true
org.testcontainers.containers.ExecInContainerPattern - /kind_volhard: Running "exec" command: mc
minio.MinioAdminTests - Executing command 'mc' returned exit code '126'
and stdout 'cannot exec in a stopped state: unknown'
java.lang.AssertionError: Expected: 0, Actual: 126
在摆弄了几个小时之后,我的想法已经不多了。有人可以帮忙吗?
【问题讨论】:
标签: docker minio testcontainers