Я пытаюсь получитьstdout в реальном временииз команды, которую я запускаю в контейнере docker. Однако мне нужно сделать это из удаленной команды, запущенной с другого хоста.
Когда я нахожусь на хосте docker, я могу запустить свою команду docker -it
и получить нужный мне вывод в реальном времени. Однако у меня есть это ограничение, где яиметьдля удаленного запуска команды, что делает предыдущее решение бесполезным. Я не могу использовать, -t
потому что он запускает псевдотерминал на основе $TERM, который не существует с удаленной командой, потому что терминала вообще нет.
Я также пробовал запустить команду docker, чтобы -d
запустить ее в фоновом режиме, docker logs -f <container>
но вывод все равно выдается весь сразу в конце процесса.
Буду признателен за любые решения или советы. Поправьте меня, если это относится к другой теме.
решение1
Разобрался с этим из некоторой справки на Docker's github. Я забыл упомянуть, что пытался запустить скрипт python в контейнере, но я не думал, что это важно.
На самом деле это была не проблема докера, а проблема питона. Я узналDocker уже предоставляет stdout в реальном времени. Python держал весь stdout в своем буфере и не сбрасывал его до завершения скрипта. За исключением случаев, когда код запускался в терминале с помощью -t
.
В команде docker мне нужно было всего лишь вызвать скрипт, python -u <script>
чтобы запретить Python буферизировать stdout.
решение2
Ну, почему бы вам не использовать стек ELK с Logsprout? Вы можете получать логи в реальном времени со всех контейнеров Docker, а также выполнять поиск по журналам и делать много других интересных вещей.