我正在尝试使用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
包含非常糟糕的文档,而我工作的大部分内容都是查看测试用例。
干杯,
尼克
答案 0 :(得分:1)
dockerClient.startContainerCmd(createContainerResponse.getId()).exec();
WaitContainerResultCallback resultCallback = new WaitContainerResultCallback();
dockerClient.waitContainerCmd(createContainerResponse.getId()).exec(resultCallback);
resultCallback.awaitCompletion();
dockerClient.removeContainerCmd(createContainerResponse.getId()).exec();
答案 1 :(得分:0)
如果您可以访问泊坞窗套接字,则可以使用remote API。这通常仅用于管理员,因为它需要完全权限。
答案 2 :(得分:0)
请考虑更多地监控Docker系统事件 https://docs.docker.com/engine/api/v1.29/#operation/SystemEvents
您需要创建一个单独的线程并订阅新创建的容器的生命周期。您将在集装箱出口时收到通知。通知你的主线程,你就没事了。费力。