我的代码创建了与docker的连接,发送命令并读取输出。
问题是连接死了,当我再次运行时,我基本上创建了另一个连接,发送数据,读取数据等......
但我需要保持此连接打开,这样我就可以使用buffers out, err
发送命令并读取结果,而不会丢失命令流。知道怎么做吗?
public static String getDockerConsole(String containerName, String input) {
String[] cmd = new String[]{
"/bin/sh",
"-c",
input
};
DockerClient dockerClient = dockerClient();
Container container = getContainer(containerName);
ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true).withTty(true).withAttachStderr(true).withCmd(cmd).withUser("root").exec();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
try {
dockerClient.execStartCmd(container.getId()).withExecId(execCreateCmdResponse.getId()).withDetach(false).withTty(true).exec(new ExecStartResultCallback(out, err)).awaitCompletion();
} catch (InterruptedException e) {
e.printStackTrace();
}
return out.toString() + err.toString();
}
编辑:当我发送命令执行文件时,它会在debugg部分显示该文件并挂起awaitCompletion()
。我想访问此连接,以便我可以在外部显示数据