首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker-java/docker远程api阻塞,直到容器结束

docker-java/docker远程api阻塞,直到容器结束
EN

Stack Overflow用户
提问于 2016-08-19 21:26:36
回答 3查看 1.1K关注 0票数 3

我正在尝试通过docker-java从java中使用docker remote API,并且我正在努力寻找一种方法来查看我的容器的执行何时完成:

代码语言:javascript
复制
 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有非常糟糕的文档,我所做的大部分工作都来自于查看测试用例。

干杯,

尼克

EN

回答 3

Stack Overflow用户

发布于 2017-11-13 20:23:56

代码语言:javascript
复制
dockerClient.startContainerCmd(createContainerResponse.getId()).exec();
WaitContainerResultCallback resultCallback = new WaitContainerResultCallback();
dockerClient.waitContainerCmd(createContainerResponse.getId()).exec(resultCallback);
resultCallback.awaitCompletion();
dockerClient.removeContainerCmd(createContainerResponse.getId()).exec();
票数 4
EN

Stack Overflow用户

发布于 2016-08-22 20:33:55

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

票数 0
EN

Stack Overflow用户

发布于 2017-06-16 21:38:06

考虑监控Docker系统事件,更多信息请点击https://docs.docker.com/engine/api/v1.29/#operation/SystemEvents

您需要创建一个单独的线程,并订阅新创建的容器的生命周期。当您的容器退出时,您将收到一个通知。通知你的主线程,你就会好起来的。辛苦了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39040288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档