问题描述
运行环境:linux+docker+nginx+php+thinkphp5.0
上述环境下有些日志没有写入文件
问题出处
文件被创建时候用户权限的问题。cli模式和php-fpm模式运行的用户不一致。cli模式下创建的文件用户权限为root,php-fpm模式创建的文件用户权限为1000。如下图:
问题分析
Docker搭建php环境,php-fpm主进程是root用户,php脚本的执行是子进程执行的,而子进程是www-data用户(docker要求子进程用户要低于root用户),映射到了宿主机用户为1000。如下图:
解决方案
让cli模式下和php-fpm模式下创建的文件用户权限一致。
- 宿主机创建一个www-data用户组和www-data用户,将此用户映射到docker 容器里面。docker run -u www-data:www-data 或者Docker-compose.yaml的配置如下
- cli模式下执行php脚本语句:docker exec -u www-data php 项目绝对路径