Nginx: Как использовать сборщик журналов docker, когда nginx работает под управлением supervisord

Официальный образ nginx docker (Файл Dockerfile) использует следующий трюк для передачи своих журналов в stdout и stderr, чтобы они были захвачены сборщиком журналов docker и доступны для просмотра с помощью docker logs <container-name>:

# forward request and error logs to docker log collectorRUN ln -sf /dev/stdout /var/log/nginx/access.logRUN ln -sf /dev/stderr /var/log/nginx/error.log

Я хочу сделать то же самое, однако у меня есть супервайзер как PID 1 в моем контейнере, и он контролирует процесс nginx, захватывает stdout и stderr и помещает их в свой собственный файл журнала. Поэтому журналы не попадают в сборщик журналов docker.

Вот соответствующий блок в моем файле supervisord.conf

[program:nginx]command=/usr/sbin/nginx -g "daemon off;"priority=990; NOTE: We do not want to redirect stdout and stderr of a nginx process to a logfile because we want docker log collector to get them.stdout_logfile= NOT SURE WHAT TO PUT HERE?stderr_logfile= NOT SURE WHAT TO PUT HERE?username=www-dataautorestart=true

Документы супервайзера великолепны (http://supervisord.org/configuration.html) , но для stdout_logfile они не дают мне нужного ответа, а именно, как мне настроить supervisord так, чтобы он не перехватывал stdout / stderr процессов (или для записи в файл журнала, но также для пересылки в обычный stdout / stderr).

То, что я уже пробовал:

  1. stdout_logfile=NONE - Не получать никаких журналов ни в stdout, ни в файл
  2. stdout_logfile=/var/log/supervisor/%(program_name)s.log - Получать журналы в файл, но не в stdout.
  3. Не определяющий stdout_logfile - Получать журналы в файл со случайным именем, но не в stdout.
  4. stdout_logfile=/dev/stdout - Супервизор выдает ошибку:

    >Исключение CRIT uncaptured python, закрытие канала (stdout) (:[Ошибка 29] Незаконный поиск [/usr/lib/python2.7/followers-packages/supervisor/supervisord.py|runforever|233] [/usr/lib/python2.7/followers-packages/supervisor/dispatchers.py|handle_read_event|231] [/usr/lib/python2.7/подписчики-пакеты/супервизор/диспетчеры.py|record_output|165] [/usr/lib/python2.7/подписчики-пакеты/супервизор/диспетчеры.py|_log|141] [/usr/lib/python2.7/последователи-пакеты/супервизор/ - loggers.py/info/273 ] [/usr/lib/python2.7/последователи-пакеты/супервизор/ - loggers.py/log/291 ] [/usr/lib/python2.7/последователи-пакеты/супервизор/ - loggers.py/bought/186 ] [/usr/lib/python2.7/последователи-пакеты/супервизор/ - loggers.py/doRollover/195 ])

То Illegal seek ошибка вызвана кодом в supervisord, который отвечает за вращение файла журнала. Чтобы перенаправить на stdout /stderr, вы должны отключить вращение файла журнала, как описано здесь:

http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html