docker的Java /docker远程API截止,直到容器完成

我正在尝试使用docker-java从java中使用docker远程API,我正在努力寻找一种方法来查看当我的容器的执行已经完成:

CreateContainerResponse container = dockerClient.createContainerCmd("me/vw:v0.1") .withVolumes(workingDIR) .withBinds(new Bind("/localDrive", workingDIR)) .withCmd("vw", "/rcv1/rcv1.train.vw.gz", "--cache_file", "/rcv1/cache_train", "-f", "/rcv1/r_temp") .withLogConfig(logconf) .exec(); dockerClient.startContainerCmd((container.getId())).exec(); Thread.sleep(10000); //OBVIOUSLY BROKEN HACK IS BROKEN System.out.println("PRINTING LOGS"); System.out.println(containerLog(container.getId(), dockerClient)); 

什么是检查容器是否完成的正常方法? 我必须写一些轮询docker服务器,还是有一些方便的阻塞函数/调用? docker-java有非常糟糕的文档,大部分工作都是从testing用例来看的。

干杯,

缺口

如果您有权访问Docker套接字,则可以使用远程API 。 这通常只用于pipe理员,因为它需要完整的权限。

考虑监视Docker系统事件,更多在这里https://docs.docker.com/engine/api/v1.29/#operation/SystemEvents

您将需要创build一个单独的线程并订阅您新创build的容器的生命周期。 您将在您的货柜退出时收到通知。 通知你的主线,你会没事的。 费力。

 dockerClient.startContainerCmd(createContainerResponse.getId()).exec(); WaitContainerResultCallback resultCallback = new WaitContainerResultCallback(); dockerClient.waitContainerCmd(createContainerResponse.getId()).exec(resultCallback); resultCallback.awaitCompletion(); dockerClient.removeContainerCmd(createContainerResponse.getId()).exec();