Я выполняю команду на удаленном компьютере, используя JSch, как показано ниже:
public String executeCommandNWaitForCompletion(String hostIp, String userName, String password, String command) throws Exception {
Session session = null;
ChannelExec channel = null;
InputStream in = null;
String response = "";
try {
session = getSession(hostIp, userName, password);
channel = (ChannelExec) session.openChannel("exec");
channel.setCommand(command);
channel.setInputStream(null);
channel.setErrStream(System.err);
in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) break;
response += new String(tmp, 0, i);
}
if (channel.isClosed()) {
if (in.available() > 0) continue;
log.debug("Exit-status: " + channel.getExitStatus());
break;
}
}
} finally {
if (in != null) in.close();
closeResources(session, channel);
}
return response;
}
В контейнере Docker Tomcat этот метод вызывается из контроллера Spring MVC.Целое приложение работает хорошо, но когда вызывается этот метод, журналы Docker-контейнера зависают, и после этого ничего не отображается.Но приложение работает как обычно, зависают только журналы.
Этот метод работал нормально, когда мы запускаем наше приложение на сервере Tomcat напрямую, но не работает в док-контейнере.
Как решитьэтот вопрос?