使用Laravel on Docker的文件权限 - 无法编辑文件

问题描述 投票:1回答:1

我在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用户时,错误就会消失,我可以按预期看到默认页面。问题是我无法编写/编辑应用程序的任何文件并在代码库中进行更改。

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

我怎样才能解决这个问题?顺便说一下,我在Linux上,所以我认为这个错误不会出现在Windows或Mac用户身上。此外,我想尽量避免常见的chmod 777解决方案,因为它不建议作为一个合适的解决方案

laravel docker file-permissions permission-denied user-permissions
1个回答
1
投票

您需要做的就是从主机本身更改已安装目录的权限,例如,如果您在主机/home/lykos/laravel/data上有以下目录,并且需要将其安装在docker容器中,请遵循以下内容:

  • 检查用于制作laravel运行的容器内的UIDGID,例如你可以找到UIDGID,其值为1000,然后从主机运行以下命令chown 1000:1000 /home/lykos/laravel/data

现在,laravel应用程序应该能够在你使用它作为/home/lykos/laravel/data的目标的任何目录中写入,并确保你没有在没有确认你拥有正确权限的情况下修改它。不要手动在其中创建另一个目录,除非你在创建后执行chown

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

假设您有一个容器作为Web服务器,并且您需要在从localhost开发的同时将应用程序托管在容器中。假设用于开发的localhost用户是lykos,网络服务器使用的容器用户是33UIDGID,您可以从localhost执行以下操作:

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

上述命令将使Web服务器能够访问和更新项目文件。并且还使您的localhost能够修改当前文件和新创建的文件(请注意,如果您使用lykos用户创建任何文件或目录,则需要使chown与Web服务器uid匹配)

© www.soinside.com 2019 - 2024. All rights reserved.