Vagrant:如何将文件夹从访客同步回主机?

Lil*_*tFX 20 virtualbox vagrant

为什么,因为很难通过来宾中的遗留编辑器来处理和编辑代码.流浪者的整个目的是为开发人员更容易,对吧:)?

因此,我请有人在这种情况下指导我:

  • 需要在项目上工作.这是git repo.需要mysql,php等等.
  • VM工作得很好(提供)
  • 但是通过ssh和"遗留"编辑器编辑此repo中的文件并不那么容易.想要使用最喜欢的IDE.

在VM repo上/home/vagrant/src.我希望它../src在主机中可见/可编辑.

我阅读了文档并在Vagranfile中推出了这个文档:

config.vm.synced_folder '../src', '/home/vagrant/src'

这个"作品",除了它会覆盖所有的内容从/home/vagrant/src与那些从../src里面是空的.

任何解决方法?我考虑过通过git克隆repo的可能性(通过github公开获得)并将文件夹同步到VM,但这感觉不对,也失去了生产配置.

Raj*_*hna 7

好像你正在寻找双向同步.如果我的理解是正确的,这个答案会帮助你.请注意,我还没有测试过这些.似乎关键是使用virtualbox同步类型.

type(string) - 同步文件夹的类型.如果未指定,则Vagrant将自动为您的环境选择最佳的同步文件夹选项.否则,您可以指定特定类型,例如"nfs".

config.vm.synced_folder '../src', '/home/vagrant/src', type: "virtualbox"
Run Code Online (Sandbox Code Playgroud)

然后再根据这个文档,

如果您使用的是Vagrant VirtualBox提供程序,则VirtualBox共享文件夹是默认的同步文件夹类型.这些同步文件夹使用VirtualBox共享文件夹系统来同步从guest虚拟机到主机的文件更改,反之亦然.

因此,我不确定为什么您的默认类型不是virtualbox.无论如何,这是值得一试的我猜.进一步进入文档似乎是在文档中解释的虚拟框类型中的错误.如果您要使用虚拟盒同步类型,请按照此处步骤操作.

  • 双向同步正在使用`config.vm.synced_folder"foo","/ bar"`.我有vagrant 1.9.2和VirtualBox 5.1.22.我认为对于OP双向也是有效的.但问题是,当配置被放入时,guest目录开始为空(如@frédéric-henri注释,原始目录未被覆盖但是"隐藏" - 我对文件系统或涉及的其他事情知之甚少知道这意味着什么). (2认同)

Vla*_*pak 5

Vagrantfile看起来像这样:

Vagrant.configure(2) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network :forwarded_port, guest: 22, host: 10170, id: "ssh"
  config.vm.provision :shell, path: "VagrantProvision.sh"
  config.vm.synced_folder "./", "/var/beeGame"
end
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的,我和你的声明一样!在这里我的回购(你可以尝试它的例子),它适合我!我使用PhpStorm打开此repo并自动编辑文件和所有更新,并从我的主机(我的笔记本电脑)同步到客户机(虚拟).

在你的情况,你正在做的一切权利,并流浪汉不得不从覆盖的所有内容/home/vagrant/src与那些从../src.这是正确的行为!您需要将代码src放在主机(您的笔记本电脑)上的dir中,而不是在您的客户机上(虚拟)!


Joh*_*hir 5

我已经确定问题不在于config.vm.synced_folder '../src', '/home/vagrant/src'覆盖 /home/vagrant/src。问题是 home/vagrant/src 成为文件系统中一个新的不同类型的目录,它是空的。因此,只需在设置共享目录后重新填充它。所以...

  1. 在客人: sudo mv home/vagrant/src home/vagrant/src-back
  2. 停止客人
  3. 将新的同步文件夹添加到 Vagrantfile: config.vm.synced_folder '../src', '/home/vagrant/src'
  4. 开始客人
  5. 在客人: sudo mv home/vagrant/src-back/* home/vagrant/src-back/

事情应该会顺利进行。


mad*_*vid 5

听起来您想主机共享来宾计算机上的文件夹,这与普通共享文件夹的作用相反。

您是否考虑过在来宾上配置 NFS,然后使用vagrant-triggers将共享从来宾挂载到主机上。

首先安装 vagrant-triggers:

vagrant plugin install vagrant-triggers

然后有一个Vagrantfile像这样的:

# where you want to mount the guest's shared folder on the host
host_mount_dir = "/home/david/vagrant-home"

Vagrant.configure(2) do |config|
    config.vm.box = "debian/jessie64"

    # forward the NFS port    
    config.vm.network "forwarded_port", guest: 2049, host: 8049

    # configure NFS on guest
    config.vm.provision "shell", inline: <<SCRIPT
apt-get install -y nfs-kernel-server nfs-common
host_ip="$(netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10)"
echo "/home/vagrant       $host_ip(rw,sync,no_subtree_check)" > /etc/exports
exportfs -a
SCRIPT

    # after the machine is up, mount the NFS share
    config.trigger.after :up do
        # mkake the dir if it doesnt exist
        run "mkdir -p " + host_mount_dir
        # we need the users pass to mount (make sure you are a sudoer!)'
        puts "Please enter your password so that we can run mount"
        run "sudo mount -t nfs -o port=8049 localhost:/home/vagrant #{host_mount_dir}" 
    end

    # before halting, unmount the share
    config.trigger.before :halt do
        # we need the users pass again
        puts "Please enter your password so that we can run mount"
        run "sudo umount #{host_mount_dir}"
    end 

end
Run Code Online (Sandbox Code Playgroud)

这是一个不寻常的设置,但我现在使用 Ubuntu 主机和 Debian 来宾测试了它,它似乎可以工作 - YMMV。