Vagrant:是否可以在guest虚拟机内共享文件和更改权限?

时间:2013-07-04 03:45:05

标签: virtualbox vagrant nfs

我一直在墙上撞了一个半星期,试图找出如何使用Vagrant和VirtualBox在主机和访客之间正确共享文件。

我需要实现的是一个从github下载我们的代码库的自动配置框。代码库权限需要因文件而异(PHP文件,shell脚本,tmp文件夹,日志文件夹等)。还需要从主机框访问代码库文件以进行编辑。

到目前为止,我已尝试过普通的虚拟机共享,NFS共享,使用bindFS进行NFS共享。这些似乎都不允许更改单个文件权限。

对于Vagrant来说,这似乎是一个绝对的暗示。老实说,我不明白Vagrant如何用于共享开发环境。

有谁知道如何正确设置它?它甚至可能吗?

供参考:

  • 主机操作系统:Ubuntu 12.04
  • 客户操作系统:Debian 6(挤压)
  • vagrant:1.2.2
  • VirtualBox:4.2.12

6 个答案:

答案 0 :(得分:13)

这里有几个部分答案,但我想让人们更容易找到这个问题,这样他们就不必尝试各种方法将这些部分答案合并为一个。

这就是我使用的,它对我来说效果很好。由于在<code>块中使用斜体是很困难或不可能的,因此我在<angled brackets>内放置了您想要更改的位。

config.vm.synced_folder ".", "/var/www/vhosts/<project_name>", 
    id: "project",
    owner: <username>,
    group: <group_name>,
    mount_options: ["dmode=775,fmode=664"]

或者可能(取决于您使用的CIFS / SMB的版本):

    mount_options: ["dir_mode=775,file_mode=664"]

如果没有所有者和组,Vagrant将使用config.ssh.username(启动框时)的值作为所有者和组。通过使用上述配置,您可以控制分配给共享文件夹的所有者和组,因为登录VM并尝试使用chgrpchown不起作用。

如果没有mount_options,您将无法控制向所有者和群组(以及其他人)授予的权利。虽然这是一个虚拟机,你可以说可以使用777这些权利,我不推荐它,因为它是一个坏习惯,如果你不小心你可能会携带它会投入生产,削弱您的生产安全性。但很明显,您可以将我习惯的775664更改为您想要的任何内容。如果你不知道那些意思,谷歌“Linux文件权限”。

你可以(出于习惯)在分隔mount_options数组的逗号后插入一个空格。别。它不能用逗号。

id可以是您想要的任何内容。

答案 1 :(得分:7)

我不确定这是否能完全解答您的问题,但我的应用程序无法写入共享文件夹系统上的磁盘,因此我在Vagrantfile中使用以下内容来允许r / w访问客户端内的任何共享文件。

config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777" 

答案 2 :(得分:6)

您是否尝试过设置Samba服务器或类似内容,以便与主机共享来宾文件系统而不是相反?

我遇到了Vagrant中内置共享的问题所以我只是按照我想要的方式设置所有内容,然后设置一个简单的Samba共享来强制用户,组和默认文件创建掩码等。这是尽管如此,使用Windows机器可能会有比Samba更好的选择......

我有一个ubuntu来宾,所以设置就像运行

一样简单

$ apt-get install samba

/etc/samba/smb.conf文件中为要共享的每个文件夹添加共享块,例如:

[data]
    comment = Local Dev Server - /data
    path = /data
    browsable = yes
    guest ok = yes
    read only = no
    create mask = 0777
    force user = root
    force group = root
#[data] End

答案 3 :(得分:4)

更新:再次在底部查看http://docs.vagrantup.com/v2/synced-folders/basic_usage.html。示例(从文档中复制并粘贴):

config.vm.synced_folder "src/", "/srv/website", owner: "root", group: "root"

答案 4 :(得分:0)

你试过synced folder吗?

我一直在使用Vagrant + VirtualBox,我们使用synced folder在主机和Vagrant VM之间共享代码。

这是一个链接:

http://docs.vagrantup.com/v2/synced-folders/basic_usage.html

这是一个代码示例:

Vagrant.configure("2") do |config|
  config.vm.synced_folder "src/", "/srv/website"
end

有点背景

我们将VirtualBox设置为我们的开发环境,我们运行我们的应用程序,并在VM内部托管数据库服务器,Tomcat服务器。我们通过Synced文件夹在主机和VM之间共享代码,以便我们可以使用在主机上运行的Eclipse进行开发。

环境:Mac

答案 5 :(得分:-1)

您可以尝试将代码库从共享文件夹复制到来宾计算机专用文件夹,例如从/vagrant/codebase复制到/codebase。一旦您将文件一直放入来宾计算机,您就可以chown正常使用它们。它并不理想,但只要您从主机端修改代码,就可以编写一个简单的脚本来运行。您还可以尝试在VM启动时复制任何文件的启动脚本,具体取决于您更新文件的频率。