文件无法在追加模式下打开:无法打开流:权限被拒绝 laradock

Paw*_*Rai 7 laravel docker dockerfile docker-compose laradock

我正在按照本地机器上 Laradock 的官方文档设置 laradock(多个项目的设置)。

安装后,我通过工作区容器 bash 安装了 laravel。我确实在nginx/sites/目录和文件中为应用程序配置了配置/etc/hosts文件。

在访问开发网址时,我收到以下错误消息:

流或文件“/var/www/laravel-api/storage/logs/laravel.log”无法在追加模式下打开:无法打开流:权限被拒绝

小智 23

这对我有用:

chown -R www-data:www-data "project foldername"
Run Code Online (Sandbox Code Playgroud)


小智 16

如果更改文件权限和所有者后仍然遇到问题,只需检查 Linux 服务器的操作系统即可。登录到您的服务器

$ ssh user@server-ip
Run Code Online (Sandbox Code Playgroud)

检查Linux服务器上运行的操作系统

$ cat /etc/os-release
Run Code Online (Sandbox Code Playgroud)

//输出

NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
Run Code Online (Sandbox Code Playgroud)

如果是 CentOS,则需要禁用安全增强型 Linux (SELinux)(如果已启用)。检查 SELinux 状态

$ sestatus
Run Code Online (Sandbox Code Playgroud)

如果启用的话

$ setenforce Permissive
Run Code Online (Sandbox Code Playgroud)

或者

$ sudo setenforce 0
Run Code Online (Sandbox Code Playgroud)

祝你有美好的一天!


Anj*_*lva 11

您必须首先输入“docker-compose exec Workspace bash”(不带引号)进入工作区

要授予单个文件写权限,

chmod -R 777 /var/www/laravel-api/storage/logs/laravel.log
Run Code Online (Sandbox Code Playgroud)

或者

chmod -R 777 /var/www/laravel-api/storage/logs
Run Code Online (Sandbox Code Playgroud)

或者

sudo chmod -R 777 /var/www/laravel-api/storage/logs/laravel.log
Run Code Online (Sandbox Code Playgroud)

当出现相同的错误但出现不同的文件夹或文件时,执行相同的操作仅更改文件夹名称

例子 :

chmod -R 777 /var/www/laravel-api/storage/logs

chmod -R 777 /var/www/laravel-api/storage/framework/views

chmod -R 777 /var/www/laravel-api/storage/framework/sessions
Run Code Online (Sandbox Code Playgroud)

  • 在实时服务器上使用 777 权限是有风险的,因为它可能成为黑客利用的一个点。不惜一切代价避免它。尝试使用 775 (13认同)

Che*_*mon 9

如果您没有在 Web 服务器上以 root 身份运行应用程序,那么根据您提供的权限,它不会具有写入权限。

从工作区容器 bash 检查。storage/logs/ 目录有drwxr-xr-x 2 root root 4096 Aug 1 07:37 logs

该错误抱怨以追加模式打开的权限被拒绝 - 它没有写入文件的权限,只有 root 有权限。

您需要做的就是让您的 Web 服务器组成为存储目录的所有者:

chown -R www-data:www-data /var/www/laravel-api/storage/
Run Code Online (Sandbox Code Playgroud)

可以www-data针对与您的 Web 服务器关联的任何组进行切换。

为了避免完全重复令人惊奇且完整的答案,我建议您阅读以下答案:

如何设置 Laravel 的文件权限?