В моем коде Jave 8 на Windows 10 я хочу напечатать результат команды docker logs
в System.out
. Я ожидаю, что результат будет таким же, как и при запуске docker logs
в командном окне. К сожалению, результат выглядит ужасно и не читается.
public static void main(String[] args) {
try {
ProcessBuilder processBuilder = new ProcessBuilder("docker", "logs", "ubuntu");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
Executors.newSingleThreadExecutor().submit(() -> {
try (InputStreamReader isReader = new InputStreamReader(process.getInputStream());
BufferedReader bufReader = new BufferedReader(isReader)) {
String line = null;
while ((line = bufReader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
});
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
Действия по воспроизведению проблемы
Откройте окно командной строки и запустите контейнер Ubuntu Docker, затем вызовите echo
в его bash
как
docker run -ti --name ubuntu ubuntu /bin/bash
echo "info"
Откройте другое командное окно и выполните команду docker logs ubuntu
, чтобы увидеть ожидаемый результат ниже.
root@52f0f89cf605:/# echo "info"
info
Теперь запустите метод Java main
и вы увидим следующий вывод.
]0;root@52f0f89cf605: /root@52f0f89cf605:/#
[K]0;root@52f0f89cf605: /root@52f0f89cf605:/# echo in ""i"n"f"o""
info