我正在用ProcessBuilder运行docker-compose,一切都可以在我的机器上正常工作。我通过阅读流o / p来获取开始的图像详细信息。 现在,我将其打包在一个jar中,并作为maven依赖项添加到另一个项目中。该命令工作正常,但我无法获取任何详细信息。 ProcessBuilder流看起来是空的。但是我可以看到Docker映像正在运行。
我已经组合了输入数据和错误数据。但是两者都是空的。 解决方法是,我在命令下运行
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}
{{end}}' <<container name>>
在ProcessBuilder中,如果我直接在终端上运行,则可以正常工作,但是也不会返回IP地址。
public List<String> execute(String directory, String command) {
List<String> commands = new ArrayList<>();
commands.add("bash");
commands.add("-c");
commands.add(command);
Process dockerComposeCommand;
ProcessBuilder builder = new ProcessBuilder().inheritIO();
builder.command(commands);
builder.directory(new File(directory).getParentFile());
String path = System.getenv("PATH");
builder.environment().put("PATH","/usr/bin:"+path);
builder.redirectErrorStream(true);
builder.redirectError(ProcessBuilder.Redirect.INHERIT);
List<String> result = new ArrayList<>();
try {
dockerComposeCommand = builder.start();
dockerComposeCommand.waitFor();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(dockerComposeCommand.getInputStream()))) {
String line = reader.readLine();
while (line != null) {
result.add(line);
line = reader.readLine();
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return result;
}
我想从ProcessBuilder中获取容器的详细信息,这是我在本地计算机中获得的
答案 0 :(得分:0)
对解决方案进行相同的设置。我只是评论了InheritedIO(),如下所示。
ProcessBuilder builder = new ProcessBuilder();//.inheritIO();
还有一点是,如果您的代码中包含InheritIO(),则输出将在调用程序的控制台中打印。
正如@DavidMaze所提到的,这些ip没有用。因此,我添加了另一种方法来检查Docker容器的状态。