3

我正在尝试使用 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有非常糟糕的文档,我所做的大部分工作都是通过查看测试用例来完成的。

干杯,

缺口

4

3 回答 3

4
dockerClient.startContainerCmd(createContainerResponse.getId()).exec();
WaitContainerResultCallback resultCallback = new WaitContainerResultCallback();
dockerClient.waitContainerCmd(createContainerResponse.getId()).exec(resultCallback);
resultCallback.awaitCompletion();
dockerClient.removeContainerCmd(createContainerResponse.getId()).exec();
于 2017-11-13T12:23:56.200 回答
0

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

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

于 2017-06-16T13:38:05.780 回答
0

如果您有权访问 docker 套接字,则可以使用远程 API。这通常仅用于管理员,因为它需要完全权限。

于 2016-08-22T12:33:54.893 回答