Cómo hacer que php-fpm inicie sesión en stdout / stderr cuando se ejecuta en un contenedor docker

Tengo php-fpm en un contenedor docker y en el Dockerfile Edito el archivo de configuración de fpm (/etc/php5/fpm/pool.d/www.conf para configurar los registros de acceso para ir a /var/log/fpm-access.log y registros de errores a los que ir /var/log/fpm-php.www.log:

# Do some php-fpm config#  Redirect worker stdout and stderr into main error log#  Activate the fpm access log#  Enable display errors#  Enable the error logRUN sed -i '/^;catch_workers_output/ccatch_workers_output = yes' /etc/php5/fpm/pool.d/www.conf && \    sed -i '/^;access.log/caccess.log = /var/log/fpm-access.log' /etc/php5/fpm/pool.d/www.conf && \    sed -i '/^;php_flag\[display_errors\]/cphp_flag[display_errors] = off' /etc/php5/fpm/pool.d/www.conf && \    sed -i '/^;php_admin_value\[error_log\]/cphp_admin_value[error_log] = /var/log/fpm-php.www.log' /etc/php5/fpm/pool.d/www.conf && \    sed -i '/^;php_admin_flag\[log_errors\]/cphp_admin_flag[log_errors] = on' /etc/php5/fpm/pool.d/www.conf

Esto funciona bien : puedo obtener un shell en el contenedor para ver los registros. Pero... no es la mejor práctica.

El problema es cuando trato de usar el recopilador de registros de docker - Necesito php-fpm para iniciar sesión en stdout o stderr para que docker pueda capturarlos y proporcionarlos al docker logs comando.

Traté de hacer esto en el Dockerfile (que es una idea que copié de la imagen oficial de nginx docker):

# Redirect fpm logs to stdout and stderr so they are forwarded to the docker log collectorRUN ln -sf /dev/stdout /var/log/fpm-access.log && \    ln -sf /dev/stderr /var/log/fpm-php.www.log

Esto no funciona : no se ven registros de acceso desde docker logs - Estoy tratando de averiguar por qué? ¿Alguien más que use fpm en docker logró que el registro funcionara en el recopilador de registros de docker?

Ok, la forma de hacerlo es enviar el error y los registros de acceso a la siguiente dirección:

/proc/self/fd/2

En php5-fpm.log añadir:

access.log = /proc/self/fd/2error_log = /proc/self/fd/2

NOTA: access.log es correcto, encontrar en esta página https://www.php.net/manual/en/install.fpm.configuration.php

Tenga en cuenta que el horneado en configuración de fpm para la última versión de la aplicación oficial Imagen de docker PHP fpm escribe en los flujos estándar:

error_log = /proc/self/fd/2...; if we send this to /proc/self/fd/1, it never appearsaccess.log = /proc/self/fd/2

Los registros PHP-FPM solo aparecerán en STDERR, por lo que puede vincular simbólicamente el fpm.log a /dev/stderr Si quieres.

ln -sf /dev/stderr /var/log/fpm-access.logln -sf /dev/stderr /var/log/fpm-error.log