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

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

就目前来看,它看起来像这样(为了简洁,相当简化):

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

事实上,这个线程一直在等待callback被callback。

我们应该如何强制线程等待直到callback被调用,通知我们docker命令已经完全结束了?


在另一个说明中,如果有人知道如何使用--rm -java将--rm参数添加到正在docker run--rm docker run命令中,我很感兴趣。

那么,如果有人需要一个解决scheme,在这里我们在最后实现:

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

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