कैसे प्राप्त करने के लिए php-fpm करने के लिए लॉग इन करने के लिए stdout / stderr में चल रहा है जब एक डोकर कंटेनर

मेरे पास एक डॉकर कंटेनर में और में पीएचपी-एफपीएम है Dockerfile मैं संपादित fpm config फ़ाइल (/etc/php5/fpm/pool.d/www.conf) जाने के लिए एक्सेस लॉग सेट करने के लिए /var/log/fpm-access.log और जाने के लिए त्रुटि लॉग /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

यह ठीक काम करता है - मैं लॉग देखने के लिए कंटेनर में एक शेल प्राप्त कर सकता हूं । लेकिन... यह सबसे अच्छा अभ्यास नहीं है ।

समस्या तब है जब मैं उपयोग करने का प्रयास करता हूं डॉकर लॉग कलेक्टर - मुझे पीएचपी-एफपीएम को स्टडआउट या स्टैडर पर लॉग इन करने की आवश्यकता है ताकि डॉकर उन्हें कैप्चर कर सके और उन्हें प्रदान कर सके docker logs कमान।

मैं में यह करने की कोशिश की Dockerfile (जो एक विचार है जिसे मैंने कॉपी किया है सरकारी nginx डोकर छवि):

# 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

यह काम नहीं कर रहा है - कोई एक्सेस लॉग नहीं देखा जाता है docker logs - मैं क्यों पता लगाने की कोशिश कर रहा हूँ? क्या डॉकर में एफपीएम का उपयोग करने वाला कोई और व्यक्ति डॉकर लॉग कलेक्टर को लॉगिंग काम करने का प्रबंधन करता है?

ठीक है, ऐसा करने का तरीका त्रुटि और एक्सेस लॉग को निम्न पते पर भेजना है:

/proc/self/fd/2

में php5-fpm.log जोड़ें:

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

नोट: access.log सही है, इस पृष्ठ में खोजें https://www.php.net/manual/en/install.fpm.configuration.php

ध्यान दें कि पके हुए fpm config आधिकारिक के नवीनतम संस्करण के लिए PHP fpm डोकर छवि मानक धाराओं को लिखता है:

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

पीएचपी-एफपीएम लॉग केवल एसटीडीआरआर में दिखाई देंगे-इसलिए आप सिमलिंक कर सकते हैं fpm.log को /dev/stderr आप चाहें तो ।

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