php-fpm: отключить access log при работе в контейнере Docker

Есть PHP-приложение, которое работает в докере под управлением php-fpm.

В логах докера (docker-compose logs -f --tail 100 laravel-app) записываются обращения к php-fpm:

laravel-app | 172.29.0.6 -  21/Jan/2021:12:17:25 +0000 "GET /index.php" 200

Я хочу выключить запись всех таких сообщений, которые можно назвать access log, и оставить только вывод фатальных ошибок.

Пробую у конфиге указывать

access.log=/dev/null

Но это не работает. Конфиг 100% цепляется, и значение нигде не переопределяется.

var_dump(ini_get("access.log"));

Выводит bool(false).

Dockerfile:

FROM php:7.4-fpm

...

# тут я также перестраховался и отправляю все вникуда
CMD ["/bin/sh", "-c", "php-fpm > /dev/null"]

Дебаг через strace

Я пошел дальше, и начал дебажить через strace.

  1. Запустил ps aux | grep php-fpm на машине (не в докере), получил список:
  • мастер-процесс php-fpm
  • два воркера
  1. Запустил strace -p (пид процесса), в консоль упал стек системных вызовов.

Оказалось, что access log пишет не мастер процесс, а воркеры, причем в пятый дескриптор.

введите сюда описание изображения

    1. error log fd/2 - записался в лог докера (в коде поставил throw new Exception("..."))
    1. access log fd/5 - записался в лог докера
    1. отправлен ответ клиенту fd/4
  1. Посмотрел, дескрипторы ls -ld /proc/126394/fd/* (тут я пид воркера поставил)
lrwx------ 1 root root 64 янв 21 15:39 /proc/126394/fd/0 -> /dev/null
l-wx------ 1 root root 64 янв 21 15:39 /proc/126394/fd/1 -> 'pipe:[1037154]'
lrwx------ 1 root root 64 янв 21 15:39 /proc/126394/fd/10 -> 'socket:[1037153]'
l-wx------ 1 root root 64 янв 21 15:39 /proc/126394/fd/2 -> 'pipe:[1037155]'
lrwx------ 1 root root 64 янв 21 15:39 /proc/126394/fd/3 -> '/tmp/.ZendSem.Qzr8z1 (deleted)'
l-wx------ 1 root root 64 янв 21 15:39 /proc/126394/fd/5 -> 'pipe:[1034796]'

Пятый, куда идет запись лога, указывает на pipe:[1034796] и вычитывается докером.

Сделал echo foo > /proc/126394/fd/5, и это упало в лог докера (если записать в 1 и 2 - также попадает в лог).

Получается, access log пишется отдельно, но каким способом можно его отключить?


Ответы (0 шт):