2017-06-12 71 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(); 
} 

似乎是一個足夠好的方法來處理從等待主線程。