2017-01-16 2 views
2

Я пытаюсь направить json logs из докера на jq. Он отлично работает, если я использую:Как закрепить докер в jq?

docker logs container_id 2>&1 | jq '.' 

Но, если я пытаюсь к хвосту, он застревает (не показывая ничего).

docker logs -f container_id 2>&1 | jq '.' 

Хотя хвостовых само по себе делает работу:

docker logs -f container_id 2>&1 

Что я здесь отсутствует?

+1

Возможно, связано с http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe? –

+0

Файлы журнала хранятся в файловой системе хоста контейнера в формате JSON. Чтобы определить местоположение файлов (ов) JSON, вы можете запустить: docker inspect [container] | grep LogPath – peak

+0

Возможно, это должно быть потоковое? Я не знаю, как вывод отличается в докере, но, возможно, вы можете использовать опцию '--stream' jq и использовать [' streaming'] (https://stedolan.github.io/jq/manual/#Streaming) фильтры для работы с данными. –

ответ

-1

Хотя по умолчанию (json-file) драйвер протоколирования использует JSON в качестве формата файла , команда docker logs не выводит JSON, но обычный текст, так что если вы используете JQ, вы должны использовать опцию -R читать Это.

+1

Вы неправильно поняли мой вопрос. 'docker logs' выводит мой stdout. Мое приложение в контейнере уже выводит JSON ... Это не проблема. Как я уже сказал, если я не использую '-f', он отлично работает. – eran