Tengo php-fpm en un contenedor docker y en el Dockerfile
edito el archivo de configuración fpm ( /etc/php5/fpm/pool.d/www.conf
) para configurar los registros de acceso /var/log/fpm-access.log
y los registros de errores para ir a /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 log
RUN 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 colocar un caparazón en el contenedor para ver los registros. Pero ... no es la mejor práctica.
El problema es cuando intento 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.
Intenté hacer esto en 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 collector
RUN 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. Intento docker logs
averiguar por qué. ¿Alguien más que usa fpm en Docker logró que el registro funcione en el Docker Log Collector?
/dev/stdin ~ /dev/fd/0 ~ /proc/self/fd/0
,/dev/stdout
y/dev/stderr
variantes. Puede ser más fácil de recordar usar/dev/stdin
.