在 java 应用程序中收集 Docker 的输出
Collecting output from Docker in java application
我正在我的 java 应用程序中的 docker 上执行一些代码,使用 ProcessBuilder 来 运行 代码,但是我无法从中检索输出。 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 接收与父进程相同的标准输出,这可能是您的终端 window。这会产生误导性的结果,因为您实际上看到了 Docker 图像列表,但它是由 shell.
打印的
如果我将其注释掉然后遍历结果列表,我可以在 JVM 中看到来自 Docker 的输出。
我正在我的 java 应用程序中的 docker 上执行一些代码,使用 ProcessBuilder 来 运行 代码,但是我无法从中检索输出。 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 接收与父进程相同的标准输出,这可能是您的终端 window。这会产生误导性的结果,因为您实际上看到了 Docker 图像列表,但它是由 shell.
打印的如果我将其注释掉然后遍历结果列表,我可以在 JVM 中看到来自 Docker 的输出。