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.