Основная версия: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04
DITRIB_DESCRIPTION="Ubuntu 20.04. 6 LTS" psql: psql (PostgreSQL) 12.20
(Ubuntu 12.20-0ubuntu0.20.04.1) Java: версия openjdk "11.0.24"
16 июля 2024 г. Среда выполнения OpenJDK (сборка 11.0.24+8-post-Ubuntu) -1ubuntu320.04) 64-битная серверная виртуальная машина OpenJDK (сборка 11.0.24+8-post-Ubuntu-1ubuntu320.04, смешанный режим, общий доступ)
Если я запускаю следующие две команды в строке cmd, все работает нормально, и я могу получить данные (у пользователя в этом случае нет пароля):
Код: Выделить всё
kubectl port-forward service/service-name 7432:5432
psql -h localhost -p 7432 -U username -d database -w -t -c "select id from foo.bar where id='1'"
Код: Выделить всё
public static Process portForward(String type, String deploymentName, String containerPort, String localPort) {
Predicate
readyPredicate = Objects::nonNull;
String command = "kubectl port-forward " + type + "/" + deploymentName + " " + containerPort + ":" + localPort;
ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", command);
Process process;
try {
process = processBuilder.start();
final Thread thread = new Thread(process::destroyForcibly);
Runtime.getRuntime().addShutdownHook(thread);
} catch (IOException e) {
throw new RuntimeException(e);
}
if (!readyPredicate.test(process)) {
final String errorMsg = String.format("Deployment '" + deploymentName + "' was not ready");
throw new IllegalStateException(errorMsg);
}
return process;
}
[img]https:/ /i.sstatic.net/3EpK2mlD.png[/img]
Если я запускаю переадресацию портов через Java ProcessBuilder, процесс выглядит так:

Между ними нет никакой разницы.
Метод для команды psql :
Код: Выделить всё
public static boolean psqlQuery() {
final ProcessBuilder processBuilder = new ProcessBuilder("sh", "-c", "psql -h localhost -p 7432 -U username -d database -w -t -c \"select id from foo.bar where id='1'\"");
try {
Process process = processBuilder.start();
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
List output = reader.lines().collect(Collectors.toList());
output.forEach(LOGGER::info);
BufferedReader errorreader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
List erroroutput = errorreader.lines().collect(Collectors.toList());
erroroutput.forEach(LOGGER::error);
return output.stream().anyMatch(c -> c.contains("1"));
} catch (IOException | InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
}
}
Это не работает и выдает сообщение об ошибке, в котором говорится, что невозможно подключиться, но если psqlQuery запускается, пока я запускаю portForward из строки cmd, он работает нормально.
Буду очень признателен за любую помощь.
Подробнее здесь: https://stackoverflow.com/questions/791 ... rt-forward