新手问题 如何在使用 vagrant 的情况下让两个目录使用同一个 VM?

diguage · 2014年03月01日 · 最后由 clc3123 回复于 2014年03月02日 · 6990 次阅读

之前的项目使用的 VM 已经都装好了各种依赖等等。现在又有一个项目,我把原来项目的Vagrantfile拷贝到新的项目下,使用vagrant up,然后vagrant ssh进入之后发现,竟然是一个新的 VM。我在原来的 VM 中安装、配置的各种东西都没有了。难道还要重新安装一遍?多浪费时间,浪费电脑磁盘空间啊!!

请问:能否修改一下配置等,使得在不同目录(项目)的 vagrant 指定到同一个 VM 下?

vagrant package --output xxxx.box可以把你配置好的虚机导出来,然后用你导出来的 box 启一个 vm。

vagrant 的 box 跟你启动的 VM 好比类跟实例的关系。你新项目的 VM 跟你以前的 VM 是同一个 box 类的两个实例,所以你第一个 VM 装东西不会出现在第二个 VM 上。

#2 楼 @piecehealth 我就是想共用一个实例。因为原来的实例上面已经安装了各种依赖等等。

#3 楼 @diguage 按一楼说的方法把第一个 vm 导出来,然后第二个 vm 基于第一个 vm 导出的 box 文件建。

#4 楼 @piecehealth 谢谢!

恩,这个方法确实可以。但是,这个方法还是会存在两个 VM。我想要的是一个 VM,可以让两个不同项目指定到同一 VM。

#5 楼 @diguage 到时候会被自己坑到,依赖装好后导出 box 根本不费时间,磁盘空间值几个钱……

#6 楼 @aptx4869 恩,您说的在理。不过,不过两个项目都是 Rails 项目,依赖也基本一样。所以,发生冲突的可能性不大。不过,还是谢谢提醒。哈哈

单纯导 Vagrantfile 是不够的,如果你真的需要用同一个虚拟机的话, 你的 vagrantfile 同级目录下会有.vagrant/machines/default/virtualbox/id 这个文件 用同一个虚拟机的 id 就可以了. 虚拟机的 id 在$user_home/VirtualBox VMs/xxxx/xxxx .vbox 文件 <Machine uuid="{*******-****-***-***-*********}" 这个 uuid 就是...

切记:切换工作目录前需要重启 vagrant. 所以如果环境差异不大,要多个项目使用同一个虚拟机更好的办法是把 Vagrantfile 放项目的上级目录

把 Vagrantfile 以及 provision 脚本作为一个单独项目 然后 project 都放 share_folder 怎么样,也不用给每个项目加一个 Vagrantfile 了

楼主别坑自己了。这种需求就属于自己挖一个坑给自己跳。

#1 楼 @piecehealth#9 楼 @krazy 的这两种做法都是 OK 的

难度递增,但是坑的深度递减 (后者好像没看到坑 lol).

@ruohanc 后者就是不支持 inotify~ 用 guard 什么的还得用 polling 模式 vagrant1.5 出来用 rsync 似乎就能解决了... 试过装个 vagrant-exec 插件,就可以在 host 执行 guest 命令再配个 alias,基本就可以感觉不到虚拟机的存在了...

楼主,可以用 vagrant + docker,把你配置好的环境,生成一个 docker images,就可以共用了。我目前正在用这种方式。只需要用一个 VM 就可以了。

把旧项目下的.vagrant 目录拷到新项目下 ok

需要 登录 后方可回复, 如果你还没有账号请 注册新账号