Bir docker kapsayıcısında çalışırken php-fpm'nin stdout / stderr'e giriş yapması


18

Bir docker kapsayıcısında php-fpm var ve Dockerfileben /etc/php5/fpm/pool.d/www.confgitmek için erişim günlükleri ve gitmek için /var/log/fpm-access.loghata günlükleri ayarlamak için fpm yapılandırma dosyasını ( ) düzenleyin /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

Bu iyi çalışıyor - Günlükleri görmek için kabın içine bir kabuk alabilirim. Ama ... bu en iyi uygulama değil.

Sorun docker günlük toplayıcı kullanmaya çalıştığınızda - doder onları yakalamak ve docker logskomuta sağlayabilir böylece stdout veya stderr oturum açmak için php-fpm gerekir .

Dockerfile( Resmi nginx docker görüntüden kopyaladığım bir fikirdir) bunu yapmaya çalıştım :

# 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

Bu çalışmıyor - erişim günlükleri görülmüyor docker logs- nedenini anlamaya çalışıyorum? Docker'da fpm kullanan başka bir kişi, docker günlük toplayıcısında günlük kaydını çalıştırmayı başardı mı?

Yanıtlar:


24

Tamam, bunu yapmanın yolu hatayı ve erişim günlüklerini aşağıdaki adrese göndermektir:

/proc/self/fd/2

Ek olarak php5-fpm.log:

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

Orada olmak için mümkün /dev/stdin ~ /dev/fd/0 ~ /proc/self/fd/0ve /dev/stdoutve /dev/stderrvaryantları. Kullanımı hatırlamak daha kolay olabilir /dev/stdin.
CMCDragonkai

1

2
Görünüşe göre access.log: github.com/docker-library/php/blob/…
CommandZ

13

Resmi PHP fpm docker görüntüsünün en son sürümü için pişmiş fpm yapılandırmasında standart akışlara yazıldığını unutmayın:

error_log = /proc/self/fd/2

...

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

Teşekkürler, bu ilginç. Artık resmi bir imaj olduğunu bilmiyordum
Tom

1
Hangi docker görüntüsüne atıfta bulunuyorsunuz? Ben php: 7-fpm koştu ve günlük hataları görünmüyor stderr.
Derek

1

PHP-FPM günlükleri yalnızca STDERR'de görünür - böylece fpm.log etmek /dev/stderristerseniz.

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

4
Bu çözüm soruda verildi ve asker bunun işe yaramadığını belirtti. Belki de düzgün çalışmasını sağlamak için dockerfile'a nasıl yükleyebileceğini veya kabında yapabileceği diğer teşhisleri belirtebilirsiniz?
Andrew Domaszek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.