2017-06-12 228 views
1

在我们的J2EE项目中,我们通过从我们的java代码调用sjourdan/ffmpeg docker,依靠docker-java进行一些视频转换。如何等待来自DockerClient.waitContainerCmd()的ResultCallback?

现在,它看起来是这样的(相当简化为简洁起见):

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命令已完全结束?


在另一方面,如果有人知道如何使用泊坞窗Java的一个--rm参数添加到出场docker run命令,我很感兴趣。

回答

0

嗯,如果有人需要一个解决方案,在这里我们在年底实现:

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

似乎是一个足够好的方法来处理从等待主线程。