Одна вещь, которую я здесь упускаю, это то, что вы не копируете банку в образ докера. Но я полагаю, что в опубликованном коде чего-то не хватает, иначе вы получите сообщение об ошибке:
Ошибка: не удалось найти или загрузить основной класс ClassToRun
Я только что создал небольшое изображение jar и docker из вашего кода, и оно работает только с вызовом:
Process process = Runtime.getRuntime().exec("cbin");
new Thread(() -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}).run();
process.waitFor();
Я просто добавил код, чтобы получить stderr из двоичного файла и распечатать его из Java-приложения, чтобы увидеть, что происходит.
Вы уверены, что сообщения об ошибках, которые вы видите, поступают от вызова Java Runtime.getRuntime().exec("cbin")
? А не из самого бинарника?
Что если вы начнете контейнер с:
docker run -it --entrypoint bash <your-image-name>
и затем в контейнере просто запустите
$ cbin
Это работает? Если вы получаете те же ошибки здесь, то это проблема cbin
, а не времени выполнения Java.