【问题标题】:Unable to execute docker command through java [duplicate]无法通过java执行docker命令[重复]
【发布时间】:2020-02-29 00:15:29
【问题描述】:

我想通过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) {
}

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

【问题讨论】:

标签: java arrays docker


【解决方案1】:

问题不在于命令中的花括号。 试着让它作为一个 shell 脚本而不是一个简单的命令运行。

Runtime.getRuntime() 检索当前的 Java 运行时环境。 并且使用exec(String [] cmdArray) 方法,命令被传递给特定于操作系统的函数调用,从而创建特定于操作系统的进程或称为运行程序。 shell 脚本是一种发出操作系统特定命令的方式,在本例中为docker psdocker inspect

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);

【讨论】:

  • 我尝试将它作为 shell 脚本运行,但仍然没有输出。知道问题可能是什么吗?我正在尝试运行“docker ps -q”命令。谢谢!
猜你喜欢
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多