如何从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(); }
似乎有一个很好的方式来处理来自主线程的等待。