如何从DockerClient.waitContainerCmd()等待ResultCallback?

时间:2017-06-12 14:55:14

标签: java docker ffmpeg docker-java

在我们的J2EE项目中,我们依靠sjourdan/ffmpeg从我们的java代码中调用docker-java docker来进行一些视频转换。

目前,它看起来像这样(为简洁而简化):

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参数,我感兴趣。

1 个答案:

答案 0 :(得分:1)

好吧,如果有人需要解决方案,那么我们在最后实施的是:

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();
}

似乎有一个很好的方法来处理来自主线程的等待。