使用ProcessBuilder运行docker-compose成功,但ProcessBuilder不返回结果

时间:2019-07-15 12:46:16

标签: java docker jar docker-compose processbuilder

我正在用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中获取容器的详细信息,这是我在本地计算机中获得的

1 个答案:

答案 0 :(得分:0)

对解决方案进行相同的设置。我只是评论了InheritedIO(),如下所示。

ProcessBuilder builder = new ProcessBuilder();//.inheritIO();

还有一点是,如果您的代码中包含InheritIO(),则输出将在调用程序的控制台中打印。

正如@DavidMaze所提到的,这些ip没有用。因此,我添加了另一种方法来检查Docker容器的状态。