Как заставить php-fpm входить в stdout / stderr при запуске в контейнере docker

У меня есть php-fpm в контейнере docker и в Dockerfile Я редактирую конфигурационный файл 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 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 - Мне нужен php-fpm для входа в stdout или stderr, чтобы docker мог захватить их и предоставить в docker logs команда.

Я пытался сделать это в Dockerfile (это идея, которую я скопировал из официальное изображение nginx docker):

# 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 - Я пытаюсь понять, почему? Удалось ли кому-нибудь еще, использующему fpm в docker, заставить работать сборщик журналов docker?

Хорошо, способ сделать это - отправить сообщение об ошибке и журналы доступа по следующему адресу:

/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 для получения последней версии официального Изображение докера 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

Журналы PHP-FPM будут отображаться только в STDERR - так что вы можете создать символическую ссылку на fpm.log к /dev/stderr если ты хочешь.

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