0

一旦我的容器启动并运行,我正在使用 TestcontainersDockerComposeContainer并使用该方法发送 shell 命令:execInContainer

@ClassRule
public static DockerComposeContainer<?> environment = 
    new DockerComposeContainer<>(new File("docker-compose.yml"))
        .withExposedService(DB_1, DB_PORT)
        .waitingFor(SERVICE_1, Wait.defaultWaitStrategy())
        .withLocalCompose(true);

其中一个命令是简单地移动一个将被处理的文件,我想等到容器内的进程处理它,然后再检查我的测试结果。

service.execInContainer("cp", "my-file.zip", "/home/user/dir");

我检查进程是否已使用 my-file.zip 的方式是检查日志:

String log = "";
while (!log.contains("Moving my-file.zip file to /home/user/dir")) {
    ExecResult cat = soar.execInContainer("cat", "/my-service/logs/service.log");
    log = cat.getStdout();
}

这可行,但我不太喜欢 while 循环内的持续轮询,并且想知道是否有更好的方法来实现这一点。

我一直在内部研究 testcontainers,它使用了 java dockerapi,所以我想知道是否有更好的方法通过该 API 执行此操作,或者我是否可以使用 Awaitility 之类的库进行等待。

感谢您的任何建议

4

0 回答 0