У меня есть хост-машина AWS Linux, на которой запущен контейнер докеров centos 7, внутри которого запущены 5.5.25 и php-fpm. Php предоставляется за пределами контейнера докеров через порт 9000 и обслуживает запросы к серверу nginx. Эта настройка работает нормально, но когда я недавно включил медленный журнал php-fpm, чтобы попытаться отладить медленный код, я не смог заставить php регистрировать медленные скрипты. Я установил следующее в /etc/php-fpm.d/www.conf:
request_slowlog_timeout = 5s
slowlog = /var/www/log/php-fpm-slow.log
а /var/www/log/php-fpm-slow.log принадлежит пользователю www с правами 777. Следующее записывается в журнал ошибок php каждый раз, когда выполняется медленный скрипт.
[07-Jul-2015 07:33:34] ERROR: failed to ptrace(ATTACH) child 18: Operation not permitted (1)
[07-Jul-2015 07:33:34] WARNING: [pool www] child 18, script '/var/www/src/index.php' (request: "GET /index.php") executing too slow (5.700050 sec), logging
Я исхожу из этого, что на самом деле срабатывает request_slowlog_timeout 5 секунд, но по какой-то причине журнал не может быть создан.
Я видел похожие, но не идентичные проблемы, предлагающие изменить /etc/sysctl.d/10-ptrace.conf или / proc / sys / kernel / yama / ptrace_scope. К сожалению, ни один из этих файлов не существует в моем хосте AWS Linux или в операционных системах контейнера Centos 7.
Есть ли у кого-нибудь идеи о том, что может вызвать эту проблему, или какие шаги я могу предпринять для дальнейшей отладки?
Я наконец понял это. Вам необходимо дать докер-контейнеру возможность использовать ptrace. Простое добавление --cap-add SYS_PTRACE в команду docker run устранило эту проблему для меня.