我正在尝试使用 Java 运行时发送 docker 命令。
像 docker cp
这样的命令与下面的方法以及直接从终端输入一样可以很好地工作。
第一个问题是 docker exec 命令只能在终端上运行,而不能在 Java 运行时中运行。其他 docker 命令如 docker cp 可以按预期工作。唯一的问题是我无法在容器上运行命令,例如在容器的终端上回显。
第二个问题是下面方法中的
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/