我正在使用ProcessBuilder在Java应用程序中的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接收与父进程相同的标准输出,这大概是您的终端窗口。这会产生误导性的结果,因为您实际上看到了Docker镜像列表,但是它是由Shell打印的。
如果我将其注释掉,然后遍历结果列表,则可以在JVM中看到Docker的输出。
关于bash - 在Java应用程序中从Docker收集输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41956413/