Nginx: Cómo usar el recopilador de registros de docker cuando nginx se ejecuta bajo supervisord

La imagen oficial de nginx docker (Dockerfile) utiliza el siguiente truco para transferir sus registros a stdout y stderr para que sean capturados por el recopilador de registros de docker y visibles mediante 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

Quiero hacer lo mismo, sin embargo tengo supervisor como PID 1 en mi contenedor y supervisa el proceso nginx y captura stdout y stderr y lo coloca en su propio archivo de registro. Por lo tanto, los registros no llegan al recopilador de registros de docker.

Aquí está el bloque relevante en mi supervisor.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

Los documentos del supervisor son geniales (http://supervisord.org/configuration.html) pero para stdout_logfile no me dan la respuesta que necesito, a saber, cómo configuro supervisord para que no intercepte una salida estándar / stderr de procesos ( o para capturar en un archivo de registro, pero también para reenviar a la salida estándar / stderr normal).

Lo que ya intenté:

  1. stdout_logfile=NONE - No obtiene registros ni de salida estándar ni de un archivo
  2. stdout_logfile=/var/log/supervisor/%(program_name)s.log - Obtener registros en un archivo pero no en la salida estándar.
  3. Sin definir stdout_logfile - Obtener registros en un archivo con nombre aleatorio, pero no en la salida estándar.
  4. stdout_logfile=/dev/stdout - El supervisor da un error:

    >CRIT uncaptured python excepción, el cierre de canal (stdout) (:[Errno 29] Ilegales buscar [/usr/lib/python2.7/seguidores-paquetes/supervisor/supervisord.py|runforever|233] [/usr/lib/python2.7/seguidores-paquetes/supervisor/repartidores.py|handle_read_event|231] [/usr/lib/python2.7/seguidores-paquetes/supervisor/repartidores.py|record_output|165] [/usr/lib/python2.7/seguidores-paquetes/supervisor/repartidores.py|_log|141] [/usr/lib/python2.7/seguidores-paquetes/supervisor/ - madereros.py|info|273] [/usr/lib/python2.7/seguidores-paquetes/supervisor/ - madereros.py|log|291] [/usr/lib/python2.7/seguidores-paquetes/supervisor/ - madereros.py|comprado|186] [/usr/lib/python2.7/seguidores-paquetes/supervisor/ - madereros.py|doRollover|195])

El Illegal seek el error es causado por el código en supervisord que es responsable de la rotación del archivo de registro. Para redirigir a stdout / stderr, debe deshabilitar la rotación del archivo de registro, como se explica aquí:

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