17

一个半星期以来,我一直在努力研究如何使用 Vagrant 和 VirtualBox 在主机和来宾之间正确共享文件。

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

到目前为止,我已经尝试过普通的 virtualbox 共享、NFS 共享、与 bindFS 的 NFS 共享。这些似乎都不允许更改单个文件权限。

这似乎是 Vagrant 的绝对亮点。老实说,我不明白 Vagrant 如何用于共享开发环境。

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

以供参考:

  • 主机操作系统:Ubuntu 12.04
  • 来宾操作系统:Debian 6(挤压)
  • 流浪者:1.2.2
  • 虚拟盒子:4.2.12
4

6 回答 6

15

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

这是我使用的,对我来说效果很好。由于在块内使用斜体很难或不可能<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可以是你想要的任何东西。

于 2014-02-25T19:32:04.330 回答
7

我不确定这是否完全回答了您的问题,但是我的应用程序无法写入共享文件夹系统上的磁盘时遇到问题,因此我在我的文件中使用了以下内容Vagrantfile来允许从内部对任何共享文件进行读写访问客户。

config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777" 
于 2013-10-02T21:45:51.013 回答
6

Have you tried setting up a Samba server or something similar so that you are sharing the guest file system with the host rather than the other way around?

I ran into issues with the built in sharing in Vagrant as well so I just setup everything the way I wanted on the guest and then setup a simple Samba share to force the user, group and default file creation mask etc. This was to work with a Windows machine though so there could be a better choice than Samba...

I had an ubuntu guest so setup was just as simple as running

$ apt-get install samba

Add a share block for each folder you want to share in the /etc/samba/smb.conf file, something like:

[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
于 2013-07-04T14:21:57.457 回答
4

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

config.vm.synced_folder "src/", "/srv/website", owner: "root", group: "root"
于 2013-08-20T18:44:56.677 回答
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

于 2013-07-04T03:56:50.440 回答
-1

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

于 2013-07-08T17:07:05.373 回答