系统环境:
64位Windows7中使用vagrant工具启动CentOS7虚拟机环境。
CentOS 7 启动Docker服务容器集群,包含PHP,NGINX,MYSQL等容器。
问题:
PHP容器运行PHP项目时出现chmod(): Operation not permitted
报错:
Failed to change permissions for directory "/mnt/www/myproject_com/public_html/web/assets/a7a84ac4": chmod(): Operation not permitted
解决思路:
chmod -R 777 dir
chown -R www dir
Linux权限问题,修改读写权限 或更改目录所有者都无效。以前的经验在这里行不通。
经验证可行的解决方式如下:
1. centos 7 进入php容器,查看该php容器的web用户和用户分组
vim /etc/passwd
......
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
......
vim /etc/group
....
daemon:x:1:
www-data:x:33:
....
发现php容器中的web用户名和分组均为www-data,编号均为33
进入CentOS 7,查看用户分组,发现编号为33的分组已存在:
vim /etc/group
...
daemon:x:2:
tape:x:33:
...
docker:x:992:
2. 添加编号为33的www用户。
所属分组为992(992为docker分组编号,在php容器中,该编号对应的分组是不存在的)
CentOS7的www用户编号必须与php容器中的web(www-data)用户编号一致!!!
vim /etc/passwd
...
www:x:33:992::/mnt/www:/sbin/nologin
vagrant启动时,配置文件的目录映射项,可配置文件所属人和所属分组。
3. 修改Vagrantfile配置文件:
config.vm.synced_folder "D:/Users/Documents/www", "/mnt/www", create:true, owner:"www", group:"docker"
4. 重启vagrant。
vagrant reload
成功更改了项目的所属人和分组。
1.创建PHP容器镜像时,指定容器运行用户为1000 www-data
FROM php:5.6-fpm
RUN usermod -u 1000 www-data
如果 你是mac
RUN usermod -u 1000 www-data && usermod -G staff www-data
2.容器里面的/usr/etc/php-fpm.d/www.conf的user和group,编号33,编号改为1000。
docker配置nginx+php各种坑 https://blog.csdn.net/golden_zjy/article/details/100046939
[PHP] chmod(): Operation not permitted 處理方式 http://www.neo.com.tw/archives/1037
使用vagrant因用户权限导致文件不可写问题的解决 https://blog.csdn.net/weixin_34081595/article/details/89858328