Назад | Перейти на главную страницу

php slowlog вызывает ошибку ptrace в контейнере докеров

У меня есть хост-машина 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 устранило эту проблему для меня.