Перенаправление вывода процесса не pid 1 в журналы докера
Как перенаправить логи процесса не pid 1 в dockerlogs с конечной целью перенаправить их в gelf?
Внутри Docker- контейнера есть 2 процесса:
1) процесс pid 1
2) не PID 1 процесс, который пишет в файл журнала по пути
Следующие документы докера и конкретно
Официальное изображение nginx создает символическую ссылку из / dev / stdout на /var/log/nginx/access.log и создает другую символическую ссылку из / dev / stderr на /var/log/nginx/error.log, перезаписывая журнал файлы и вызывая отправку журналов на соответствующее специальное устройство.
не помогло Только журналы процесса pid 1 перенаправляются в dockerlogs
Выполненные шаги:
1ln -sf /dev/stdout _path_
в Dockerfile
2 Запуск обновленного изображения в качестве контейнера.
3 docker logs -f _containerid_
показывает только логи процесса pid 1
Есть еще один официальный источник докеров
Какие состояния
Docker поддерживает различные драйверы журналирования, используемые для хранения и / или потоковой передачи журналов stdout и stderr контейнера основного процесса контейнера (pid 1)
Так что, возможно, это причина того, что вы не видите логи не- pid- процесса.
Хотя до сих пор не понимаю, почему созданная символическая ссылка с помощью ln -sf / dev / stdout /var/log/mysql/error.log не работает.
1 ответ
У меня такой же вопрос по теме. Как я это решаю, вам нужно запустить "ln -s", когда Docker работает НЕ во время сборки Docker (Dockerfile).
Вот мой сценарий оболочки Bash
tail -n 0 -q -F /path/folder/*.log >> /proc/1/fd/1 &
Надежда помогает