Vagrant共享和同步文件夹

68

我创建了一个包含以下内容的 Vagrantfile:

Vagrant::Config.run do |config|

  config.vm.define :foo do |cfg|
    cfg.vm.box     = 'foo'
    cfg.vm.host_name = "foo.localdomain.local"
    cfg.vm.network :hostonly, "192.168.123.10"
  end

  Vagrant.configure("2") do |cfg|
    cfg.vm.customize [ "modifyvm", :id , "--name", "foo" , "--memory", "2048", "--cpus", "1"]
    cfg.vm.synced_folder "/tmp/", "/tmp/src/"
  end

end

输入vagrant up或者vagrant reload之后,我收到以下信息:

[foo] Attempting graceful shutdown of VM...
[foo] Setting the name of the VM...
[foo] Clearing any previously set forwarded ports...
[foo] Fixed port collision for 22 => 2222. Now on port 2200.
[foo] Creating shared folders metadata...
[foo] Clearing any previously set network interfaces...
[foo] Preparing network interfaces based on configuration...
[foo] Forwarding ports...
[foo] -- 22 => 2200 (adapter 1)
[foo] Booting VM...
[foo] Waiting for VM to boot. This can take a few minutes.
[foo] VM booted and ready for use!
[foo] Setting hostname...
[foo] Configuring and enabling network interfaces...
[foo] Mounting shared folders...
[foo] -- /vagrant

我的问题是:

  1. 为什么Vagrant会挂载/vagrant共享文件夹?我已经读到共享文件夹已经被弃用,而且在我的Vagrantfile中从来没有定义任何共享文件夹。
  2. 为什么同步文件夹没有设置好?

我正在使用MacOX 10.8.4上的Vagrant版本1.2.7。

2个回答

113

共享文件夹与同步文件夹

基本上,从v1到v2(文档),共享文件夹被重命名为同步文件夹。在幕后,它仍然在主机和客户机之间使用vboxsf进行通信(如果有大量文件/目录,则存在已知的性能问题)。

Vagrantfile目录挂载为客户机中的/vagrant

Vagrant会将当前工作目录(包含Vagrantfile的目录)作为默认行为挂载到客户机中的/vagrant

请参阅文档

注意:默认情况下,Vagrant将共享您的项目目录(具有Vagrantfile的目录)到/vagrant。

您可以通过在Vagrantfile中添加cfg.vm.synced_folder“。”,“/vagrant”,disabled:true来禁用此行为。

为什么同步文件夹不起作用?

基于输出结果,在启动时未将/tmp在主机上挂载。

使用VAGRANT_INFO=debug vagrant upVAGRANT_INFO=debug vagrant reload启动VM,以获取更多关于为什么未挂载同步文件夹的输出。可能是权限问题(主机上/tmp的模式位应为drwxrwxrwt)。

我使用以下测试快速测试并成功(我使用了opscode bento raring vagrant基础盒子)

config.vm.synced_folder“/tmp”,“/tmp/src”

输出:

$ vagrant reload
[default] Attempting graceful shutdown of VM...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Available bridged network interfaces:
1) eth0
2) vmnet8
3) lxcbr0
4) vmnet1
What interface should the network bridge to? 1
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Running 'pre-boot' VM customizations...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /tmp/src

在虚拟机内,您可以看到挂载信息 /tmp/src on /tmp/src type vboxsf (uid=900,gid=900,rw)


35
vagrant up --debugvagrant reload --debug 可能会有用。意思是这两个命令可能对你有帮助。 - user1493046
4
禁用默认挂载点非常有用,谢谢。将cfg.vm.synced_folder ".", "/vagrant", disabled: true进行禁用。 - Mark Chorley
我在虚拟机“public”文件夹之外有一个主机文件夹,正确设置为同步,但是当机器启动时它无法挂载。 VAGRANT_INFO=debug vagrant reload 对我很有帮助,现在每次都可以挂载了。谢谢! - Jamil Said
3
为使其正常工作,我不得不在Vagrantfile中添加config.vm.synced_folder(".", "/vagrant", disabled: false)。我猜默认设置已经改变了。 - Pierre Thibault

0

添加

config.vm.synced_folder ".", "/vagrant", disabled: false

对于由bento/freebsd-13提供的FreeBSD 13.1客户机,将Vagrantfile返回给我。

主机运行macOS 12.5.1,Vagrant 2.3.0和VirtualBox 6.2.36。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接