应用程序无法使用 Vagrant 创建可写文件夹

Posted

技术标签:

【中文标题】应用程序无法使用 Vagrant 创建可写文件夹【英文标题】:Application can't create a writable folder with Vagrant 【发布时间】:2014-12-10 00:15:02 【问题描述】:

我从 Vagrant 的 Official Precise64 box 配置了我自己的基本 Vagrant Box。我有一个同步文件夹位于“/var/www”,公共文件夹位于“/var/www/public”。

对于“/var/www”,我的权限是:

drwxr-xr-x  1 vagrant vagrant 

对于“/var/www/public”,我的权限是:

drwxr-xr-x  1 vagrant vagrant

为了说明我的问题,对于 WordPress 应用程序,我手动将上传权限设置为 777。WordPress 能够在当月的上传内容中创建一个文件夹,例如“/var/www/public/wp-content /上传/10/";但是,它无法上传或写入刚刚创建的文件夹,除非我再次手动将新创建的“10”文件夹的权限更改为可写。

这种情况发生在所有应用程序中,例如 Laravel 的“storage”文件夹,基本上任何时候程序尝试创建目录。尝试在配置期间强制设置 Vagrant Up 的权限也不起作用:

config.vm.synced_folder "/path/to/writable/folder", "/path/to/writable/folder", :mount_options => ["dmode=777","fmode=666"]

那么,我需要在虚拟服务器上设置哪些权限才能使其正常工作?

【问题讨论】:

【参考方案1】:

我在 Vagrant 中使用了 WordPress 和 Laravel,并在 Vagrantfile 中设置了写入权限:

config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=774','fmode=775']

并将默认的 Apache 用户添加到 vagrant 组(我使用 shell 配置):

usermod -a -G vagrant www-data

【讨论】:

这行得通。就我而言,“config.vm.synced_folder ".", "/var/www", :mount_options => ["dmode=777", "fmode=666"]" 也有效。谢谢 这不会使 vagrant 中的所有文件夹都可写吗?如果想让特定文件夹可写怎么办。我正在考虑只让 /cache 文件夹可写,其余的保持原样。 对于想要使用此功能的 Homestead 用户:***.com/a/56056933/3017716【参考方案2】:

为了扩展 Jesse 的答案,在使用 homestead(以及 Homestead.yaml)时,您可以像这样传递这些选项

folders:
- map: ./
  to: /home/vagrant/code
  options:
    mount_options: ['dmode=777','fmode=777']

基于https://laravel.com/docs/5.8/homestead#configuring-homestead 和https://www.vagrantup.com/docs/synced-folders/basic_usage.html#modifying-the-owner-group

【讨论】:

【参考方案3】:

尝试将以下行添加到您的 Vagrant 文件中:

config.vm.synced_folder ".", "/vagrant", :group => "www-data", :mount_options => ['dmode=775','fmode=664']

【讨论】:

您能否详细说明您的答案,添加更多关于您提供的解决方案的描述?

以上是关于应用程序无法使用 Vagrant 创建可写文件夹的主要内容,如果未能解决你的问题,请参考以下文章

文件操作

Vagrant机器无法通过ssh对我新创建的用户进行身份验证

Vagrant:无法让 NFS 工作

Vagrant 错误:无法挂载 VirtualBox 共享文件夹(Guest Additions,vboxsf)

无法更改 vagrant 主文件夹中文件夹的权限

无法将 Ngrok 与 Vagrant 连接