在我们的 J2EE 项目中,我们通过调用 sjourdan/ffmpeg 进行一些视频转换。我们的java代码中的docker,依赖docker-java .
目前,它看起来像这样(为了简洁起见,进行了相当简化):
CreateContainerCmd createCommand = dockerClient.createContainerCmd("sjourdan/ffmpeg")
.withVolumes(aVolume)
.withBinds(aBind)
.withCmd("a lot of options about the conversion itself, codec, ratio, …");
CreateContainerResponse container = createCommand.exec();
dockerClient.startContainerCmd(container.getId()).exec();
// vanilla implementation of ResultCallback
MyResultCallback callback = new MyResultCallback();
dockerClient.waitContainerCmd(container.getId()).exec(callback);
事实是,当然,线程会继续执行此操作,而不会等待回调被回调。
我们应该如何强制线程等待,直到调用回调,通知我们 docker 命令完全结束?
<小时/>另一方面,如果有人知道如何使用 docker-java 将 --rm
参数添加到播放的 docker run
命令中,我很感兴趣。
最佳答案
好吧,如果有人需要解决方案,我们最后实现的是:
CountDownLatch latch = new CountDownLatch(1);
MyResultCallback callback = new MyResultCallback(latch);
dockerClient.waitContainerCmd(container.getId()).exec(callback);
return latch.await(5, TimeUnits.MINUTES);
MyResultCallback.onComplete
看起来像
public void onComplete()
{
latch.countDown();
}
似乎是处理主线程等待的好方法。
关于java - 如何等待来自 DockerClient.waitContainerCmd() 的 ResultCallback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44502516/