docker环境下php-fpm slowlog不能追加写入

6 篇文章 0 订阅

问题描述:

       使用docker编译的PHP-FPM无法写入慢日志,具体表现为已在config中配置了request_terminate_timeout=10;slowlog= /var/tmp/$pool.slow.log;运行PHP容器时也能生成/var/tmp/www.slow.log慢日志文件,但你会发现这个文件大小一直是0,好像从来没有慢程序。

      查阅资料后发现:在docker中部署的php容器默认是不能记录慢日志的;在Linux系统中,PHP-FPM使用SYS_PTRACE跟踪worker进程,SYS_PTRACE是什么?这是Linux capabilities里的一种操作特权?Linux capabilities 是什么?linux从内核2.2开始,将传统上与超级用户root关联的特权划分为不同的单元,称为capabilites。Capabilites 作为线程(Linux 并不真正区分进程和线程)的属性存在,每个单元可以独立启用和禁用。如此一来,权限检查的过程就变成了:在执行特权操作时,如果进程的有效身份不是 root,就去检查是否具有该特权操作所对应的capabilites,并以此决定是否可以进行该特权操作。所以在docker容器中php写慢日志就得有CAP_KILL capability ,设置系统时间,就得具有 capability CAP_SYS_TIME。docker容器中默认是不启用这个功能的,因此导致了问题。

解决方案:

1、关闭seccomp

docker run --security-opt seccomp=unconfined 

2、采用超级权限模式
docker run --privileged

3、仅开放ptrace限制

docker run --cap-add=sys_ptrace 

当然从安全角度考虑,如只是想使用gdb进行debug的话,建议使用第三种。

END!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值