使用 Docker 实现 Laravel 应用程序 - 在 Apache 服务器上获取权限被拒绝

使用 Docker 实现 Laravel 应用程序 - 在 Apache 服务器上获取权限被拒绝

我正在尝试将我的 laravel 网站 docker 化。我正在Windows 10并且 docker 工具箱对我来说效果不太好(相对路径不能很好地安装)。

因此,我决定设置一个 Virtualbox Ubuntu 16.x 服务器并在虚拟机内安装 docker CE。然后,我将我C:\Projects的 Windows 主机作为共享文件夹添加到我的 Ubuntu 虚拟机中。然后,在我的虚拟机中,我安装了 Guest Additions,这样共享文件夹就会出现在我的虚拟机下/media/sf_Projects/

最后,我使用此命令将我的非root帐户添加到latheesan:并创建了到的符号链接(以便于访问)。vboxsfsudo adduser latheesan vboxsf/media/sf_Project/home/latheesan/Projects

重新启动 Ubuntu VM 后,我可以以 latheesan 用户身份访问共享文件夹内容。

因此,我将主机上的项目克隆到:C:\Projects\mysite.iodir。

然后我通过 ssh 进入我的 Ubuntu virtualbox VM(运行 Docker CE)并运行我的docker-compose build && docker-compose up -d命令。一切正常,容器已启动。当我访问在 docker 容器中运行的站点时,我从 apache 收到此错误:

禁止您无权访问此服务器上的/。

因此,我在容器中启动了一个交互式 shell,看起来站点目录是以 root 而不是 www-data 形式挂载的。也许这就是错误的原因。

以下是我在主机和容器上执行操作的所有日志:https://pastebin.com/raw/M7Jq0CgP

这是我的设置:

知道为什么卷无法挂载吗www-data?或者使用 Windows 主机 + 虚拟机 vm + docker ce 是否无法实现?

答案1

Virtualbox 文档

[...] 使用默认的挂载选项,所有文件都归 root 所有。这可以通过添加一些挂载选项来更改。选项通过 -o 参数传递。您可以使用一个参数使用多个选项,用逗号分隔值。有关可以使用哪些选项的更多信息,请参阅 mount 的手册页。用户手册还指出了与共享文件夹兼容的选项。要挂载 SF 以便您成为文件的所有者,请使用以下命令:

sudo mount -t vboxsf -o rw,uid=1000,gid=1000 share ~/host

相关内容