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

And*_*rew 16 virtualbox nfs vagrant

我花了一个半星期的时间试着找出如何使用Vagrant和VirtualBox在主机和客户之间正确共享文件.

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

到目前为止,我已经尝试了正常的虚拟盒共享,NFS共享,与bindFS的NFS共享.这些似乎都不允许更改单个文件权限.

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

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

以供参考:

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

ico*_*ast 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"]
Run Code Online (Sandbox Code Playgroud)

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

    mount_options: ["dir_mode=775,file_mode=664"]
Run Code Online (Sandbox Code Playgroud)

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

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

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

id可以任何你想要的.

  • 为了将来参考,你在这里引用了什么版本的流浪汉?我遇到的一个问题是不同版本的Vagrant支持不同的选项. (3认同)

car*_*lve 7

我不确定这是否完全回答了你的问题,但是我的应用程序无法写入共享文件夹系统上的磁盘问题,所以我在我的内容中使用以下内容Vagrantfile来允许r/w访问来自内部的任何共享文件客户.

config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777" 
Run Code Online (Sandbox Code Playgroud)


Mat*_*per 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
Run Code Online (Sandbox Code Playgroud)