java - 无法通过java执行docker命令

标签 java arrays docker

我想通过java执行这个命令

"docker ps -q | xargs docker Inspect --format '{{.HostConfig.NetworkMode}} {{ .Config.Image }} {{ .NetworkSettings.IPAddress }}'"

当我尝试通过 java 执行此命令时,我无法获得任何输出。 我没有收到任何错误或异常。

代码下方

String command ="docker ps -q | xargs docker inspect --format '{{.HostConfig.NetworkMode}} {{ .Config.Image }} {{ .NetworkSettings.IPAddress }}'";

process = Runtime.getRuntime().exec(command);
bufferedReaderObj = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    while ((sLine = bufferedReaderObj.readLine()) != null) {
}

请帮助我,我认为这是因为命令中的大括号。

最佳答案

问题不在于命令中的花括号。 尝试使其作为 shell 脚本运行,而不是简单的命令。

Runtime.getRuntime() 检索当前的 Java 运行时环境。 使用 exec(String [] cmdArray) 方法,命令将传递给特定于操作系统的函数调用,这会创建特定于操作系统的进程或称为正在运行的程序。 shell 脚本是发出操作系统特定命令的方法,在本例中是 docker ps 和 dockerspect。

String[] cmd =
        {"/bin/sh",
                "-c",
                "docker ps -q | xargs docker inspect --format '{{.HostConfig.NetworkMode}} {{ .Config.Image }} {{ .NetworkSettings.IPAddress }}'"};

Process process = Runtime.getRuntime().exec(cmd);
BufferedReader bufferedReaderObj = new BufferedReader(new InputStreamReader(process.getInputStream()));
String sLine = "";
StringBuilder output = new StringBuilder();
while ((sLine = bufferedReaderObj.readLine()) != null) {
    output.append(sLine);
}
System.out.println(output);

关于java - 无法通过java执行docker命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60436724/

相关文章:

android - 如何在android中的字符串中获取具有多个值的json

java - 如何将Docker容器作为持久服务器运行?

django - uWSGI与Docker的Supervisord一起提供的应用程序

javascript - 填充 javascript 数组的更好方法

java - 使用 MySql DB 获取 java 中准备好的语句的元数据

java - 发送 JSON 到服务器

java - 何时/为何使用/定义接口(interface)

c++ - 初始化对象数组

docker - 如何让/etc/profile 在 Alpine/Docker 中自动运行

java - 支柱形式不适用于支柱瓷砖