我在 Windows 10 上使用 Laravel 8、Docker Desktop 4.2.0(托管 Ubuntu-20.04)和 WSL2。
在我成功清理了我的 Docker 容器中的 Laravel 缓存文件后,我遇到了同样的错误
sail artisan optimize:clear
在重新提供应用程序并在我的浏览器上重新加载它时,它报告了一些文件系统错误。跟踪日志指向 Laravel 尝试执行 chmod() 命令并返回错误的行
chmod(): 不允许操作
我试过跑步
sail composer dumpautoload
在我的 Docker 容器中。该进程运行了一段时间,然后在命令行上报告了相同的chmod(): Operation not permitted错误。
这个命令拯救了我的一天:
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/var/www/html \
-w /var/www/html \
composer dumpautoload
只需将它们复制并粘贴到运行您的航行命令的命令行并按 Enter 即可。在最后一个 composer 命令完成后,您现在可以访问您的应用程序,而不会 chmod() 标记错误。
警告:请备份您修改过的 Laravel 文件;特别是在运行上述命令之前,routes/web.php。
更新
到了通过表单上传文件的地步,chmod(): Operation not permitted 再次弹出。该问题可能是由于通过 composer 安装多个依赖项而无意中导致目录结构/信息的更改。
此外,用于 Laravel 应用程序的 Docker 容器和 Docker 镜像由 Laravel Sail 管理。当您运行sail up 时,Sail 会为应用程序设置用户访问策略。它通过为 docker 镜像创建新用户并在应用程序启动时将它们关联到组中来实现这一点。。您可以通过运行来确认这一点:
sail artisan sail:publish
并检查应用程序根目录中生成的docker 文件夹中的 Docker 文件。 Sail 实际上使用它们来为您的应用启动新容器。
解决方案
如果您有任何接近我的设置并且遇到chmod(): Operation not permitted 错误;停止航行:
sail stop
等待所有容器停止运行,然后重新启动:
sail up