Como fazer com que o php-fpm efetue login no stdout / stderr ao executar em um contêiner docker

12

Eu tenho o php-fpm em um contêiner do docker e no Dockerfile edito o arquivo de configuração do fpm ( /etc/php5/fpm/pool.d/www.conf ) para configurar os logs de acesso para /var/log/fpm-access.log e os logs de erro para /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

Isso funciona bem - eu posso colocar um shell no container para ver os logs. Mas ... isso não é uma boa prática.

O problema é que quando eu tento usar o coletor de log do docker - eu preciso do php-fpm para logar stdout ou stderr, então o docker pode capturá-los e fornecê-los ao comando docker logs . / p>

Eu tentei fazer isso no Dockerfile (que é uma ideia que eu copiei do imagem oficial do docker do nginx ):

# 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

Isso não está funcionando - nenhum log de acesso é visto de docker logs - Estou tentando descobrir por quê? Alguém mais que usa o fpm na janela de encaixe conseguiu fazer o log funcionar no coletor de log do docker?

    
por Tom 09.01.2015 / 11:56

3 respostas

19

Ok, a maneira de fazer isso é enviar o erro e os logs de acesso para o seguinte endereço:

/proc/self/fd/2

Em php5-fpm.log add:

access.log = /proc/self/fd/2
error_log = /proc/self/fd/2
    
por 21.01.2015 / 15:48
10

Observe que o cozido em fpm config para o A versão mais recente da imagem de encaixe do PHP fpm oficial é gravada nos fluxos padrão:

error_log = /proc/self/fd/2

...

; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2
    
por 24.11.2015 / 01:41
1

Os registros do PHP-FPM só aparecerão no STDERR - para que você possa vincular o fpm.log ao /dev/stderr , se quiser.

ln -sf /dev/stderr /var/log/fpm-access.log
ln -sf /dev/stderr /var/log/fpm-error.log
    
por 17.12.2015 / 22:51