沙滩星空的博客沙滩星空的博客

解决vagrant中docker的PHP容器修改文件权限报错问题 chmod(): Operation not permitted

系统环境:
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

未经允许不得转载:沙滩星空的博客 » 解决vagrant中docker的PHP容器修改文件权限报错问题 chmod(): Operation not permitted

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址