Python на docker для распечатки на стандартный вывод - PullRequest
0 голосов
/ 10 апреля 2020

Я использую контейнер docker, который выполняет команды с сервером. Затем он записывает вывод в файлы. У меня есть еще один docker, который запускается каждые несколько минут и забирает все с docker log {name}. Я ищу способ прочитать файлы журнала выполнения и распечатать его на STDOUT, чтобы служба регистрации могла выбрать данные. Я пробовал что-то вроде: subprocess.call("cat {latest_file}".format(latest_file=latest_file), shell=True), но при печати он выводит его только на консоль.

Мой вопрос: могу ли я добавить свои собственные файлы / каталоги в регистратор docker?

1 Ответ

0 голосов
/ 10 апреля 2020

Предполагая, что вы заранее знаете имя файла журнала, вы можете разрешить приложению продолжать запись в том виде, в каком оно есть (то есть в файл), и символическую ссылку на этот файл на /dev/stdout или /dev/stderr

This это довольно распространенное решение, например nginx делает это

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

РЕДАКТИРОВАТЬ: Обратите внимание, что это будет работать, только если приложения, которые ведут журналирование, работает как PID 0. Если вы разветвили процесс или аналогичный, вам придется явно записать в дескриптор файла stdout / stderr PID 1 (доступно в /proc/1/fd

# forward request and error logs to docker log collector
RUN ln -sf /proc/1/fd/1 /var/log/nginx/access.log \
    && ln -sf /proc/1/fd/2 /var/log/nginx/error.log

(см. этот ответ для более подробной информации)

...