Все объединенные журналы докеров с именем контейнера
Поэтому я пытаюсь получить объединенный вывод всех журналов контейнера с его именем контейнера в файле журналаdocker logs --tail -3 с именем контейнера >> файл logst.log.
2 ответа
Журналы докеров принимают одну команду, поэтому вам придется запускать их для каждого контейнера. Думаю, я мог бы сделать что-нибудь вместе:
docker ps --format='{{.Names}}' | xargs -P0 -d '\n' -n1 sh -c 'docker logs "$1" | sed "s/^/$1: /"' _
docker ps --format='{{.Names}}'
- печатать названия контейнеровxargs
- для ввода-d '\n'
- для каждой строки-P0
- выполнять параллельно с любым количеством параллельных заданий- удалите эту опцию, если вы не собираетесь делать
docker logs --follow
- это может вызвать проблемы, рассмотрите возможность добавления
stdbuf -oL
а такжеsed -u
разблокировать потоки
- удалите эту опцию, если вы не собираетесь делать
-n1
- передать один аргумент подчиненному процессуsh -c 'script' _
- выполнять скрипт для каждой строки, передавая строку в качестве первого позиционного аргументаdocker logs "$1"
- получить журналыsed 's/^/$1: /'
- добавить имя докера к каждой строке журнала
Но лучшим решением промышленного уровня было бы пересылать журналы докеров на journalctl
или другое решение для ведения журнала и используйте эту утилиту для агрегирования и фильтрации журналов.
Понял.
для меня в docker ps -a -q --format "table {{.ID}}"
; do { docker ps -a -q --format "table {{.ID}}\t{{.Names}}\n" | grep "$i" и журналы докеров --timestamps --tail 1 "$i"; } >> logs.log; сделанный
logs.log - это общее имя файла.