ฉันมี php-fpm ในคอนเทนเนอร์ docker และในDockerfile
ฉันแก้ไขไฟล์ config fpm ( /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 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
ใช้งานได้ดี - ฉันสามารถนำเชลล์ลงในคอนเทนเนอร์เพื่อดูบันทึก แต่ ... มันไม่ใช่วิธีปฏิบัติที่ดีที่สุด
ปัญหาคือเมื่อฉันพยายามใช้ตัวรวบรวมบันทึกข้อมูลนักเทียบท่า - ฉันต้องการ php-fpm เพื่อเข้าสู่ระบบไปยัง stdout หรือ stderr เพื่อให้นักเทียบท่าสามารถจับภาพพวกเขาและให้docker logs
คำสั่งแก่พวกเขา
ฉันพยายามทำสิ่งนี้ในDockerfile
(ซึ่งเป็นความคิดที่ฉันคัดลอกมาจากรูปภาพ nginx docker อย่างเป็นทางการ ):
# 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
นี่ไม่ทำงาน - ไม่เห็นบันทึกการเข้าถึงdocker logs
- ฉันพยายามคิดว่าเพราะอะไร มีใครบ้างที่ใช้ fpm ในเครื่องมือจัดการนักเทียบท่าเพื่อให้การบันทึกทำงานกับตัวรวบรวมบันทึกนักเทียบหรือไม่
/dev/stdin ~ /dev/fd/0 ~ /proc/self/fd/0
และ/dev/stdout
และ/dev/stderr
ตัวแปร/dev/stdin
อาจจะง่ายต่อการจำที่จะใช้