java - 如何等待来自 DockerClient.waitContainerCmd() 的 ResultCallback?

标签 java docker ffmpeg docker-java

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

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

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 命令中,我很感兴趣。

最佳答案

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

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

似乎是处理主线程等待的好方法。

关于java - 如何等待来自 DockerClient.waitContainerCmd() 的 ResultCallback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44502516/

相关文章:

docker - 根据构建ARG在Dockerfile中选择ENV/ARG

docker - 在 Docker 容器中使用 VNCserver + GUI 应用程序 + 虚拟显示

linux - Packer、Dockramp 与 Dockerfile

ios - 在带有 10.9 的 xCode 6.1 Mac 上安装 ffmpeg ios 库 armv7、armv7s、i386 和通用

java - 由于 CSV 中的换行符而导致的 ArrayIndexOutOfBounds 异常

JAVA 正则表达式 : Making custom regex for String. split()

java - 使用 JPA 导入 CSV

java - 为什么我需要一个可运行程序而不是直接从 main 调用?

ffmpeg 覆盖输出文件(如果存在)

sockets - ffmpeg:与相机保持实时连接/套接字的最佳做法是什么,并节省 ffprobe 的时间