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