Нечитаемый вывод из подпроцесса команды "docker logs" - PullRequest
0 голосов
/ 07 февраля 2020

В моем коде 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...