在java应用程序中收集Docker的输出

我在我的Java应用程序中使用ProcessBuilder运行代码在Docker上执行一些代码,但是我无法从它检索输出。 BufferedReader不从容器返回的InputStream中读取任何内容。 有没有一个具体的方法来检索Docker的输出? 我从来没有遇到过从bash执行输出的麻烦,所以我想也许docker工人以某种方式做不同的事情。 任何想法,将不胜感激

以下是代码片段:

Process dockerCommand; ProcessBuilder builder = new ProcessBuilder("bash","-c","sudo docker images"); builder.redirectErrorStream(true); builder.redirectOutput(ProcessBuilder.Redirect.INHERIT); builder.redirectError(ProcessBuilder.Redirect.INHERIT); dockerCommand = builder.start(); dockerCommand.waitFor(); List<String> result = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(dockerCommand.getInputStream())) { String line = reader.readLine(); while (line != null) { result.add(line); line = reader.readLine(); } } catch (IOException exc) {} 

该线

 builder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 

导致bash接收与父进程相同的标准输出,这可能是您的terminal窗口。 这会产生令人误解的结果,因为您实际上看到Docker映像列表,但它正在被shell打印。

如果我评论一下,然后遍历结果列表,我可以看到在JVM中的Docker的输出。