发送';执行官';使用Java向Docker容器发送命令
我正在尝试使用Java运行时发送docker命令。 像发送';执行官';使用Java向Docker容器发送命令,java,docker,terminal,Java,Docker,Terminal,我正在尝试使用Java运行时发送docker命令。 像docker cp这样的命令与下面的方法配合使用非常好,并且可以直接从终端键入 第一个问题是,docker exec命令只能从终端工作,而不能在Java运行时工作。其他docker命令,如docker cp,按预期工作。唯一的问题是我不能在容器上运行命令,就像在容器的终端上回音一样 第二个问题是下面方法中的System.out.println(…)方法实际上不打印任何内容 private static void runCommand()引发I
docker cp
这样的命令与下面的方法配合使用非常好,并且可以直接从终端键入
docker exec
命令只能从终端工作,而不能在Java运行时工作。其他docker命令,如docker cp
,按预期工作。唯一的问题是我不能在容器上运行命令,就像在容器的终端上回音一样System.out.println(…)
方法实际上不打印任何内容private static void runCommand()引发IOException、InterruptedException{
Process proc=Runtime.getRuntime().exec(
新字符串[]{“/bin/sh”,
“-c”,
“docker exec-u 0-it echo”,“'abc'”});
缓冲读取器=
新的BufferedReader(新的InputStreamReader(proc.getInputStream());
字符串行=”;
而((line=reader.readLine())!=null){
系统输出打印(行+“\n”);
}
进程waitFor();
}
无需在shell中运行docker。您可以直接启动该过程。
从Java1.7开始,您还可以使用重定向子流程的标准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();
}
ProcessBuilder ProcessBuilder=new ProcessBuilder();
command(“docker”、“exec”、“-it”、“echo”、“abc”).inheritIO();
试一试{
Process=processBuilder.start();
BufferedReader=新的BufferedReader(新的InputStreamReader(process.getInputStream());
弦线;
而((line=reader.readLine())!=null){
系统输出打印项次(行);
}
int exitCode=process.waitFor();
System.out.println(“\n包含错误代码:“+exitCode”);
}捕获(例外e){
e、 printStackTrace();
}
希望这有帮助。这能回答您的问题吗?不幸的是没有。我已经可以发送docker命令了,问题是用'exec'命令发送将在容器内运行的命令。使用API不是更好吗?
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();
}