一旦我的容器启动并运行,我正在使用 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 之类的库进行等待。
感谢您的任何建议