代码之家  ›  专栏  ›  技术社区  ›  ltdev

文件Laravel与DOCKER文件权限-不能编辑文件

  •  0
  • ltdev  · 技术社区  · 5 年前

    我正在Docker上安装一个新的Laravel。

    当我运行容器并尝试从浏览器访问laravel应用程序时,我会得到laravel在屏幕上抛出的文件权限错误。

    UnexpectedValueException
    The stream or file "/var/www/html/storage/logs/laravel-2019-02-24.log" could not be opened: failed to open stream: Permission denied
    

    所以,如果我在流动的容器里 sudo chown www-data:www-data -R /var/www/html/ 并将文件的所有权切换到 www-data 用户ErrOS已经消失,我可以看到默认页面。问题是我无法编写/编辑应用程序的任何文件,也无法在代码库中进行更改。

    如果我 sudo chown -R lykos:lykos ./application // the folder that my laravel app lives in 从本地终端(即不是通过运行的容器),我可以编辑文件,但文件权限的错误再次显示。

    我怎么解决这个问题?顺便说一句,我在Linux上,所以我认为这个错误不会发生在Windows或Mac用户身上。我也想尽量避免 chmod 777 不建议作为适当的解决方案

    1 回复  |  直到 5 年前
        1
  •  1
  •   Mostafa Hussein    5 年前

    您需要做的只是从主机本身更改挂载目录的权限,例如,如果主机上有以下目录 /home/lykos/laravel/data 您需要将其安装在Docker容器中,如下所示:

    • 检查 UID GID 在用来制造 例如,你可能会发现 UID GID 具有 以下值 1000 然后从主机运行以下命令 命令 chown 1000:1000 /home/lykos/laravel/data

    现在,laravel应用程序应该能够在您将其用作目标的任何目录中编写 /主页/lykos/laravel/data 并确保在没有确认您拥有正确权限的情况下不会对其进行修改,例如,除非您这样做,否则不要在其中手动创建另一个目录 chown 创建之后。

    上述解决方案适用于将用于写入该目录的用户,如果有其他用户需要确保通过linux acl而不是使用world权限授予他们适当的权限(777)

    假设您有一个容器作为web服务器,并且在从本地主机进行开发时需要将应用程序托管在容器中。假设用于开发的本地主机用户是 lykos web服务器使用的容器用户是 33 对于 UID GID 您可以从本地主机执行以下操作:

    sudo chown 33:33 /home/lykos/laravel/data -R
    sudo setfacl -Rm u:lykos:rwx,d:u:lykos:rwx /home/lykos/laravel/data
    

    上面的命令将使web服务器能够访问和更新项目文件。并且还使本地主机能够修改当前文件和新创建的文件(请注意,如果您使用 莱科斯 需要创建的用户 乔恩 匹配web服务器uid)