【问题标题】:FIle could not be opened in append mode: failed to open stream: Permission denied laradock无法在附加模式下打开文件:无法打开流:权限被拒绝 laradock
【发布时间】:2020-11-21 23:14:02
【问题描述】:

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

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

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

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

【问题讨论】:

  • 存储目录的权限是什么?可能是目录的权限导致了这里的问题。您可以在终端中使用 ls -l /var/www/laravel-api/storage/ 命令找到它。
  • 从工作区容器 bash 中检查。 storage/logs/ 目录有drwxr-xr-x 2 root root 4096 Aug 1 07:37 logs
  • 也请参阅:vsupalov.com/docker-shared-permissions。如果您没有正确配置它们,您的 docker 容器在共享文件夹中创建/覆盖的文件可能具有不需要的权限。

标签: laravel docker docker-compose dockerfile laradock


【解决方案1】:

这对我有用:

chown -R www-data:www-data "project foldername"

【讨论】:

  • 当我将它粘贴到 cpanel 服务器的终端时,它显示“chown: invalid user: ‘www-data:www-data’”
  • @ehsanasarzadeh 它取决于您的网络服务器在哪个用户下运行。有时它是 apache、www-data、www 甚至是 root。找出哪个对您的系统是正确的,并相应地调整语句。
【解决方案2】:

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

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

错误是抱怨在附加模式下打开权限被拒绝 - 它没有写入文件的权限,只有 root 权限。

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

chown -R www-data:www-data /var/www/laravel-api/storage/

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

为避免完全重复一个惊人而完整的答案,我建议您阅读此答案:

How to set up file permissions for Laravel?

【讨论】:

    【解决方案3】:

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

    $ ssh user@server-ip
    

    检查您在 linux 服务器上运行的操作系统

    $ cat /etc/os-release
    

    //输出

    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    

    如果是 CentOS,如果启用,则需要禁用 Security-Enhanced Linux (SELinux)。 检查 SELinux 状态

    $ sestatus
    

    如果启用,则

    $ setenforce Permissive
    

    或者

    $ sudo setenforce 0
    

    祝你有美好的一天!

    【讨论】:

      【解决方案4】:

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

      要授予单个文件的写权限,

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

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

      sudo chmod -R 777 /var/www/laravel-api/storage/logs/laravel.log
      

      当同样的错误出现但不同的文件夹或文件时,做同样的事情只是改变文件夹名称

      示例:

      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
      

      【讨论】:

      • 在实时服务器上使用 777 权限是有风险的,因为它可能成为黑客的利用点。不惜一切代价避免它。尝试使用 775
      • @stanleymbote - 授予对单个 .log 文件的访问权限?
      【解决方案5】:

      您需要运行以下命令。它对我有用:

      第 1 步:

      sudo chmod -R +rwX .

      第 2 步:

      sudo chown -R $(whoami) .

      【讨论】:

      • 解释..这对我没有任何作用..
      • @francisco 感谢您的询问。基本上,我在 Visual Studio 代码中从事 laravel 项目,但遇到了存储问题。然后我打开 Visual Studio 代码 *terminal 并执行这些命令,它对我有用。
      【解决方案6】:

      授予 group write 访问 /storage/logs/ 的权限

      sudo chmod g+w storage/logs
      

      【讨论】:

        猜你喜欢
        • 2021-10-01
        • 2021-07-18
        • 2021-10-03
        • 2020-08-29
        • 2021-10-03
        • 2021-05-11
        • 2019-02-10
        • 2013-01-22
        • 1970-01-01
        相关资源
        最近更新 更多