Получите stdout в реальном времени из контейнера Docker по удаленно выполненной команде

Получите stdout в реальном времени из контейнера Docker по удаленно выполненной команде

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

Связанный контент