Cara mendapatkan php-fpm untuk masuk ke stdout / stderr saat berjalan dalam wadah docker

Saya memiliki php-fpm dalam wadah docker dan di Dockerfile Saya mengedit file konfigurasi fpm (/etc/php5/fpm/pool.d/www.conf) untuk mengatur log akses untuk pergi ke /var/log/fpm-access.log dan log kesalahan untuk pergi ke /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

Ini berfungsi dengan baik-saya bisa memasukkan shell ke dalam wadah untuk melihat log. Tapi... ini bukan praktik terbaik.

Masalahnya adalah ketika saya mencoba menggunakan docker Log collector - Saya perlu php-fpm untuk masuk ke stdout atau stderr sehingga docker dapat menangkapnya dan memberikannya ke docker logs perintah.

Saya mencoba melakukan ini di Dockerfile (yang merupakan ide saya disalin dari gambar docker nginx resmi):

# 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

Ini tidak berfungsi - tidak ada log akses yang terlihat dari docker logs - Saya mencoba untuk mencari tahu mengapa? Apakah ada orang lain yang menggunakan fpm di docker yang berhasil membuat logging berfungsi ke docker Log collector?

Ok, cara untuk melakukan ini adalah untuk mengirim kesalahan dan log akses ke alamat berikut:

/proc/self/fd/2

Di php5-fpm.log tambah:

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

Catatan: access.log benar, temukan di halaman ini https://www.php.net/manual/en/install.fpm.configuration.php

Perhatikan bahwa dipanggang di FPM config untuk versi terbaru dari Resmi PHP fpm docker image menulis ke aliran standar:

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

PHP-FPM log hanya akan muncul di STDERR - sehingga Anda dapat symlink fpm.log untuk /dev/stderr jika kau mau.

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