Open ncepuwanghui opened 4 years ago
权限问题,请保持以下三个相同,就没问题了
权限问题,请保持以下三个相同,就没问题了
- 1.php-fpm运行用户和组
- 2.nginx运行用户和组
- 3.PicUploader所属用户和组
@xiebruce 再请教下,docker容器内运行时,每个容器的用户和组都是各自容器内的,例如php-fpm是容器php的用户组www-data,nginx是容器nginx的用户组nginx,PicUploader是宿主机的用户组为apprun,这三个感觉没法统一,有其他方法吗
@ncepuwanghui php-fpm和nginx都是可以修改配置文件来修改运行的用户和组的,把php-fpm和nginx的运行用户组修改成PicUploader所属用户组,即apprun
,再重启php-fpm和nginx即可。
docker的php-fpm
的运行用户组是在/usr/local/etc/php-fpm.d/www.conf
中设置(默认用户和组都是www-data
)
docker的nginx
的运行用户组是在/etc/nginx/nginx.conf
中设置的,它这里只设置了用户,但其实是可以这么设置的user 用户名 组名
(比如:user www www
,注意它中间是空格而不是冒号)
而宿主机的PicUploader所属用户和组都是apprun
,这应该是你给的一个用户了吧,如果是远程服务器那就算了,如果是本地电脑是macOS或Linux我不建议用这个权限(windows无所谓),如果是本地电脑是macOS或Linux,建议把这个用户和组设置为你平时电脑平时使用的用户和组,这样你修改文件也方便,不用老是用root权限改。就算是远程服务器,一般也习惯用www:www
作为用户和组,或者用php-fpm默认的www-data
也行,当然什么用户都无所谓,只不过是一个通用习惯罢了。
@xiebruce 我试了好像不行,因为容器内的用户和组是容器镜像中的/etc/passwd和/etc/group,不是宿主机的/etc/passwd,可以基于官方镜像在自定义Dockfile中使用useradd增加用户,但也只能保证名字一样,uid和gid是不同的。
@ncepuwanghui 那你看看宿主机的用户的uid和gid,然后在容器里删掉已存在的用户和组,再重新创建,先创建组,并且在创建时指定gid为宿主机PicUploader所属组的gid,然后再创建用户,并指定用户id为宿主机PicUploader所属用户的uid,指定所属组的gid为宿主机PicUploader所属组的gid,这样应该是可以的。
先在外部宿主机查看apprun用户的uid和gid,假设uid=1001和gid=1001
id apprun
然后在容器里创建组,注意用-g 1001
指定这个组的id为前面获取到的apprun组的id
groupadd -g 1001 apprun
然后再在容器里创建用户(使用-u 1001
指定该用户的uid,使用-g apprun
指定该用户所属组(这里不用gid的原因是前面已经指定apprun组的gid了,所以可以直接用组名),最后一个apprun表示要创建的用户名)
useradd -u 1001 -g apprun apprun
docker 部署nginx+php-fpm时,打开dashboard出现”file_put_contents(/xxx/config/.config.json): failed to open stream: Permission denied“,无法保存配置,点击保存无响应。
docker run加了
--privileged=true
参数也不行