我在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
解决方案,因为它不建议作为一个合适的解决方案
您需要做的就是从主机本身更改已安装目录的权限,例如,如果您在主机/home/lykos/laravel/data
上有以下目录,并且需要将其安装在docker容器中,请遵循以下内容:
UID
和GID
,例如你可以找到UID
和GID
,其值为1000
,然后从主机运行以下命令chown 1000:1000 /home/lykos/laravel/data
现在,laravel应用程序应该能够在你使用它作为/home/lykos/laravel/data
的目标的任何目录中写入,并确保你没有在没有确认你拥有正确权限的情况下修改它。不要手动在其中创建另一个目录,除非你在创建后执行chown
。
上述解决方案适用于将用于写入该目录的用户,如果有其他用户需要确保通过linux acl而不是使用world权限给予他们适当的权限(777)
假设您有一个容器作为Web服务器,并且您需要在从localhost开发的同时将应用程序托管在容器中。假设用于开发的localhost用户是lykos
,网络服务器使用的容器用户是33
和UID
的GID
,您可以从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匹配)