Vagrant同步文件夹在VirtualBox上无法实时工作

10

我的同步文件夹没有正常工作,它们在启动时进行一次同步,但当我在主机上进行更改时,Vagrant不能实时同步。

首先介绍一下我的系统:

  • 操作系统:Linux Mint 18 Sarah
  • Virtualbox版本:5.0.24-dfsg-0ubuntu1.16.04.1
  • Vagrant版本:1.9.0
  • vagrant-hostmanager (1.8.5)
  • vagrant-share (1.1.6)
  • vagrant-vbguest (0.13.0)

在我们开始讨论之前,我并没有使用最新的Virtualbox版本,因为它不在软件库中,一个简单的vagrant up失败了。

我的Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.88.88"
  config.vm.hostname = "my.centos.dev"
end

vagrant up 给了我 这个

现在当我在主机上创建一个文件时:

falnyr@mint:~/centos-vagrant $ ls
ansible  Vagrantfile
falnyr@mint:~/centos-vagrant $ touch file.txt
falnyr@mint:~/centos-vagrant $ ls
ansible  file.txt  Vagrantfile

并 ssh 连接到客户机:

falnyr@mint:~/centos-vagrant $ vagrant ssh
[vagrant@my ~]$ ls /vagrant/
ansible  Vagrantfile

正如您所看到的,该文件未被创建。当我执行vagrant reload时,在机器启动期间再次执行同步。

注意:我不能使用NFS同步,因为我需要跨平台就绪的环境。

有什么想法可以实现实时同步吗?


这个解决了我的问题,跟你的问题非常相似:https://dev59.com/xaXja4cB1Zd3GeqPNS-U 希望对你有同样的帮助! - Cleber Alcântara
4个回答

14

这个盒子的所有者已默认在同步类型上启用了rsync。如果您查看盒子的Vagrantfile(在我的情况下是~/.vagrant.d/boxes/centos-VAGRANTSLASH-7/0/vmware_fusion,但您的可能在virtualbox提供程序下),您会看到一个带有内容的Vagrantfile。

Vagrant.configure("2") do |config|
  config.vm.synced_folder ".", "/vagrant", type: "rsync"
end

只需将此文件从box目录中删除,它就能工作。

请注意,如果您计划使用NFS,可以在Vagrantfile中更改同步类型。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.88.88"
  config.vm.hostname = "my.centos.dev"
  config.vm.synced_folder ".", "/vagrant", type: "nfs"
end

1
我尝试过不用rsync,但文件夹仍然无法工作。NFS不是一个选项,因为它需要跨平台。 - Jan Richter
你从盒子文件夹中删除了现有的Vagrantfile和你当前的Vagrantfile吗?这对我有效。 - Frederic Henri
你是对的!从 ~/.vagrant.d/.. 的 Vagrantfile 中删除解决了问题!但是当我初始化 centos/7 时,默认情况下会添加 rsync,有没有办法防止 box 创建带有 rsync 的这行? - Jan Richter
当你运行新的 vagrant init centos/7 时,你是什么意思?它甚至没有提到默认 Vagrantfile 中的默认同步文件夹。 - Frederic Henri
我在git存储库中有上述的Vagrantfile,我克隆它然后执行vagrant up,它会自动生成带有行config.vm.synced_folder ".", "/vagrant", type: "rsync"的文件,这是什么原因呢? - Jan Richter
这个文件来自于虚拟机本身,不是你所拥有的文件,它是作为 Vagrantfile 的一部分下载的(https://www.vagrantup.com/docs/vagrantfile/)。当你下载虚拟机时,你只需要删除这个文件即可。不幸的是,你不能删除一个特定类型并恢复到默认设置,你可以改变为 nfs 例如,但不能恢复到默认设置,或者你可以创建另一个共享文件夹而不使用 rsync config.vm.synced_folder ".", "/myvagrant",然后 VM 上的 /myvagrant 文件夹将以同步模式共享。 - Frederic Henri

5
您可以使用rsync-auto命令:
vagrant rsync-auto

实际上,当我在同步方面遇到问题时,添加type: nfs帮助了我:

config.vm.synced_folder ".", "/home/ubuntu/qb-online", type: "nfs"

你可以从文档中阅读更多信息: https://www.vagrantup.com/docs/synced-folders/rsync.html

0
Vagrant.configure("2") do |config|
  config.vm.synced_folder ".", "/vagrant", type: "nfs",
  rsync__exclude: ".git/"
end

只需在Vagrant.configure("2") do |config|中使用第二行和第三行代码即可:


-1

如果有人遇到vbox“同步/挂载”问题,只需进入Vagrant文件所在的Vagrant ssh,而无需进行vagrant up,并运行命令“sudo yum upgrade”,这需要一些时间,一旦完成后退出vagrant并再次运行vagrant up。问题将得到解决。..:)

并确保如果您正在使用Centos,请在您的VagrantFile中使用“Bento/Centos”

  1. vagrant ssh
  2. sudo yum upgrade
  3. vagrant reload

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