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.
- Запустил
ps aux | grep php-fpmна машине (не в докере), получил список:
- мастер-процесс php-fpm
- два воркера
- Запустил
strace -p (пид процесса), в консоль упал стек системных вызовов.
Оказалось, что access log пишет не мастер процесс, а воркеры, причем в пятый дескриптор.
-
- error log
fd/2- записался в лог докера (в коде поставилthrow new Exception("..."))
- error log
-
- access log
fd/5- записался в лог докера
- access log
-
- отправлен ответ клиенту
fd/4
- отправлен ответ клиенту
- Посмотрел, дескрипторы
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 пишется отдельно, но каким способом можно его отключить?
