java - 使用 Java 向 Docker 容器发送 'exec' 命令

标签 java docker terminal

我正在尝试使用 Java 运行时发送 docker 命令。 像 docker cp 这样的命令与下面的方法以及直接从终端输入一样可以很好地工作。

  1. 第一个问题是 docker exec 命令只能在终端上运行,而不能在 Java 运行时中运行。其他 docker 命令如 docker cp 可以按预期工作。唯一的问题是我无法在容器上运行命令,例如在容器的终端上回显。

  2. 第二个问题是下面方法中的 System.out.println(...) 方法实际上并没有打印任何内容。

private static void runCommand() throws IOException, InterruptedException {
        Process proc = Runtime.getRuntime().exec(
                new String[]{"/bin/sh",
                        "-c",
                        "docker exec -u 0 -it <CONTAINER_NAME> echo",  "'abc'"});
        BufferedReader reader =
                new BufferedReader(new InputStreamReader(proc.getInputStream()));
        String line = "";
        while ((line = reader.readLine()) != null) {
            System.out.print(line + "\n");
        }
        proc.waitFor();
}

最佳答案

无需在 shell 内运行 docker。您可以直接启动该过程。 从 Java 1.7 开始,您还可以使用 ProcessBuilder.inheritIO()重定向子进程的标准I/O

下面是打印 echo 命令输出的工作示例:

ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("docker", "exec" , "-it", "<CONTAINER_NAME_OR_ID>", "echo", "abc").inheritIO();

try {
  Process process = processBuilder.start();
  BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

  String line;
  while ((line = reader.readLine()) != null) {
    System.out.println(line);
  }

  int exitCode = process.waitFor();
  System.out.println("\nExited with error code : " + exitCode);

} catch (Exception e) {
  e.printStackTrace();
} 

希望这有帮助。

关于java - 使用 Java 向 Docker 容器发送 'exec' 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59831024/

相关文章:

c - 如何解释终端中可执行文件名称前的 './' 前缀?

java - Jasper报路径问题,在App server上运行找不到.jasper文件

java - 为 Mac 构建 OpenCV JDK 6 32 位

docker - 无法看到rstudio服务器日志文件

php - 带有 Apache 和 MySQL mysqli_connect 的 Docker PHP 5.6.23 不是添加了扩展的函数

java - 如何在 Linux 中打开命令终端?

python - 如何修复 virtualenvwrapper_run_hook :12: and virtualenvwrapper. sh 问题...?

java - org.json.JSONException : JSONObject ["alias"] not a string

java - Eclipse 中同一编辑器中的不同字体大小

docker - 将 JHipster 6.0.1 推送到 Gitlab 存储库