为什么,因为很难通过来宾中的遗留编辑器来处理和编辑代码。流浪者的整个目的是为开发人员更容易,对吧:)?
因此,我请有人在这种情况下指导我:
VM回购在/home/vagrant/src
。我希望它在主机的../src
中可见/可编辑。
我阅读了文档并在Vagranfile中推出了这个文档:
config.vm.synced_folder '../src', '/home/vagrant/src'
这“工作”除了它覆盖/home/vagrant/src
中的所有内容和来自../src
的内容为空。
任何解决方法?我考虑过通过git克隆repo的可能性(通过github公开获得)并将文件夹同步到VM,但这感觉不对,也失去了生产配置。
我的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
正如你在这里看到的,我和你的声明一样! Here my repo(你可以试试这个例子),它对我有用!我使用PhpStorm打开此repo并自动编辑文件和所有更新,并从我的主机(我的笔记本电脑)同步到客户机(虚拟)。
在你的情况下,你做得很好,并且vagrant必须覆盖/home/vagrant/src
中的所有内容和来自../src
的内容。这是正确的行为!您需要将代码放入主机(您的笔记本电脑)上的src
目录中,而不是在您的客户机上(虚拟)!
好像你正在寻找双向同步。如果我的理解是正确的,这个answer会帮助你。请注意,我还没有测试过这些。似乎关键是使用virtualbox
同步type。
type(string) - 同步文件夹的类型。如果未指定,则Vagrant将自动为您的环境选择最佳的同步文件夹选项。否则,您可以指定特定类型,例如“nfs”。
config.vm.synced_folder '../src', '/home/vagrant/src', type: "virtualbox"
然后再根据this doc,
如果您使用的是Vagrant VirtualBox提供程序,则VirtualBox共享文件夹是默认的同步文件夹类型。这些同步文件夹使用VirtualBox共享文件夹系统来同步从guest虚拟机到主机的文件更改,反之亦然。
因此,我不确定为什么您的默认类型不是virtualbox。无论如何,这是值得一试的我猜。进一步进入文档似乎是在文档中解释的虚拟框类型中的错误。如果您打算使用虚拟盒同步类型,请关注steps here。
我已经确定问题不是config.vm.synced_folder '../src', '/home/vagrant/src'
覆盖/ home / vagrant / src。问题是home / vagrant / src成为文件系统中一个新的不同类型的目录,它是空的。因此,只需在设置共享目录后重新填充它。所以...
sudo mv home/vagrant/src home/vagrant/src-back
config.vm.synced_folder '../src', '/home/vagrant/src'
sudo mv home/vagrant/src-back/* home/vagrant/src-back/
事情应该会很好地发展。
听起来您想要使用主机与来宾计算机共享文件夹,这与普通共享文件夹的作用相反。
您是否考虑过在客户机上配置NFS,然后使用vagrant-triggers将来自guest虚拟机的共享挂载到主机上。
首先安装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
这是一个不寻常的设置,但我现在测试它与Ubuntu主机和Debian客户端,它似乎工作 - YMMV。
我使用以下hack从guest虚拟机到主机rsync文件夹:
ssh_config
上$ vagrant ssh-config > ssh_config
rsync
guest文件夹返回给定配置的主机$ rsync -avH -e "ssh -F ./ssh_config" default:/vagrant/ ./
它对我有用,我希望它适合你!
我使用这种结构与vagrant一起工作:
Vagrantfile
MyCode.php
和Vagrantfile包含:
config.vm.synced_folder“。”,“/ vagrant”
这意味着MyCode.php在/ vagrant文件夹中的vagrant机器内可见。我可以从流浪汉机器(客人)和我的机器(主机)编辑该文件。
Vagrant有插件可以帮助在Guest和Host OS之间复制文件和文件夹。
安装vagrant-vbguest
和vagrant-scp:
$ vagrant plugin install vagrant-vbguest
$ vagrant plugin install vagrant-scp
要在Vagrant主机和来宾VM之间复制文件或目录,您需要知道来宾VM的ID或名称。
可以在以下命令的输出中找到此信息:
$ vagrant global-status
将文件或目录从Vagrant主机复制到来宾VM:
$ vagrant scp <some_local_file_or_dir> <vm_name>:<some_path_on_vm>
将文件或目录从来宾VM复制到Vagrant主机:
$ vagrant scp <vm_name>:<some_file_or_dir_on_vm> <some_local_path>