我一直在墙上撞了一个半星期,试图找出如何使用Vagrant和VirtualBox在主机和访客之间正确共享文件。
我需要实现的是一个从github下载我们的代码库的自动配置框。代码库权限需要因文件而异(PHP文件,shell脚本,tmp文件夹,日志文件夹等)。还需要从主机框访问代码库文件以进行编辑。
到目前为止,我已尝试过普通的虚拟机共享,NFS共享,使用bindFS进行NFS共享。这些似乎都不允许更改单个文件权限。
对于Vagrant来说,这似乎是一个绝对的暗示。老实说,我不明白Vagrant如何用于共享开发环境。
有谁知道如何正确设置它?它甚至可能吗?
供参考:
答案 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并尝试使用chgrp
和chown
不起作用。
如果没有mount_options
,您将无法控制向所有者和群组(以及其他人)授予的权利。虽然这是一个虚拟机,你可以说可以使用777
这些权利,我不推荐它,因为它是一个坏习惯,如果你不小心你可能会携带它会投入生产,削弱您的生产安全性。但很明显,您可以将我习惯的775
和664
更改为您想要的任何内容。如果你不知道那些意思,谷歌“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启动时复制任何文件的启动脚本,具体取决于您更新文件的频率。