如何导出Vagrant虚拟机进行传输


107

我有一个无所事事的盒子并正在运行(已配置LAMP堆栈)。我需要将其传输到另一台PC。如何导出?我猜我可以获得一个或多个可以复制到另一台PC的文件,因此可以在其中运行一些命令来导入无业游民的盒子。


1
我写了一些脚本来自动化无业游民的盒子的转移。参见soniah / transfer_vagrant_boxes
Sonia Hamilton

//,有人尝试过Sonia的脚本吗?
弥敦道(Nathan Basanese)2015年

@NathanBasanese AFAIU,这些脚本有助于转移基本框,而不是最终的运行中的VM,因为它们利用了无用的框重新包装(请参阅其文档)
Olivier Berger

Answers:


119

您有两种方法可以做到这一点,我将其称为“ 肮脏的”和“ 干净的”

1. 肮脏的方式

使用以下vagrant package命令在当前虚拟环境中创建一个框:

http://docs.vagrantup.com/v2/cli/package.html

然后将盒子复制到另一台PC上,使用进行添加,vagrant box add然后vagrant up像往常一样运行它。

请记住,Vagrantfile虚拟机启动时,工作目录中的文件(带有的文件)是共享的,因此您也需要将其复制到另一台PC。

2. 清洁方式

从理论上讲,永远不需要使用Vagrant进行导出/导入。如果您具有预见性,可以使用配置来配置虚拟环境(chef,puppet,ansible),并为您的工作目录使用git之类的版本控制系统,那么在这一点上复制环境就像运行以下命令一样简单:

git clone <your_repo>
vagrant up

5
尝试做一个干净,有远见的管理员...您不必在git repo中放入操作系统安装iso吗?您是否建议,例如。使用ansible,您的存储库将包含Vagrantfile和ansible剧本。Vagrantfile将1.从vagrantcloud下载一个基盒。2 .运行ansible手册以使用其他文件/存储库/云存储来配置/配置基盒。对?还是git回购中还有其他内容?
滚刀

8
“干净的方式”是否考虑了可能在vm中的数据库(mySQL,Wordpress)?如何将其同步到另一台PC?
kevllar's

1
@kevllar干净的方式意味着,在git信息库之外没有任何信息可以启动新的dev环境。这意味着将在供应新的无用信息框期间(通过Chef / Puppet / what-have-you)完成数据库的安装和配置。
Hovis Biddle

2
那么,Hashicorp推荐的方式是否也“肮脏”?即包装盒子并上传到地图集服务器?我不知道,如果“干净”的方式实际上将复制确切的环境,我认为是无业游民的整个目的....
sijpkes

1
我不明白官方方式如何被认为是肮脏的。任何善良的灵魂都能解释为什么?
thclpr

28

Mac上的硬盘驱动器在项目中间发出哔哔声,因此我决定安装SSD。我需要将项目从一个磁盘移动到另一个磁盘。需要考虑的几件事:

  • 我在Mac上无所事事
  • 我正在使用git

这对我有用:

1.) Copy your ~/.vagrant.d directory to your new machine.
2.) Copy your ~/VirtualBox\ VMs directory to your new machine. 
3.) In VirtualBox add the machines one by one using **Machine** >> **Add**
4.) Run `vagrant box list` to see if vagrant acknowledges your machines. 
5.) `git clone my_project`
6.) `vagrant up`

我在添加VB Guest时遇到了一些问题。

在此处输入图片说明

用此解决方案修复了它们。


//,我将尝试@KJPrince。感谢您为我们分解。
弥敦道(Nathan Basanese)2015年

//,我试过,但我在下面的链接得到了错误,当我复制了我的VirtualBoxVMs目录到〜/ VirtualBox的\虚拟机,跑vagrant box list0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/...
弥敦道Basanese 2015年

18

这实际上很简单

  1. 在远程计算机上安装虚拟盒流浪汉
  2. 整理你的无业游民的机器

    vagrant package --base [machine name as it shows in virtual box] --output /Users/myuser/Documents/Workspace/my.box

  3. 复制盒子到你的遥控器

  4. 通过运行来初始化远程计算机上的框

    vagrant init [machine name as it shows in virtual box] /Users/myuser/Documents/Workspace/my.box

  5. vagrant up


1
如果您的计算机名称很长,并且您懒于查看Virtualbox GUI并输入它的名称或ID,则可以使用此终端命令列出所有VM的名称和ID VBoxManage list vms。之后,您可以复制并执行@Phil第二步和第四步中的操作。:)是的。
Sid

@Sid为什么不只是$无业游民的盒子列表
Ken Ratanachai S.

@KenRatanachaiS,因为您的命令列出了框,例如:(scotch/box (virtualbox, 3.0))。我的命令-具有标识符的虚拟机,例如:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid


2

上面的答案对我都不起作用。我花了两天的时间来研究将Vagrant + VirtualBox Machine从一台计算机迁移到另一台计算机的方法……这是可能的!

首先,您需要了解虚拟机与同步/共享文件夹是分开的。因此,打包机器时,打包时将不带文件,而是带数据库。

你需要做什么:

1-打开计算机1主机的CMD(命令行。使用右键->“以管理员身份运行”以管理员身份打开它),然后转到无所事事的安装文件。就我而言:C:/ VVV您将看到您的Vagrantfile以及以下文件夹:

/config/
/database/
/log/
/provision/
/www/
Vagrantfile
...

/ www /文件夹是我的开发域与同步文件夹的存放位置。您可能将同步文件夹放在其他位置,只需确保了解自己在做什么即可。/ config和/ database也是同步文件夹。

2-运行以下命令: vagrant package --vagrantfile Vagrantfile

(此命令使用您的Vagrantfile配置对您的虚拟机进行打包。)

您可以在Vagrant文​​档中阅读有关该命令的内容:

一个常见的误解是--vagrantfile选项将打包一个Vagrantfile,当此框使用vagrant init时使用。不是这种情况。取而代之的是,在使用该框时,会加载Vagrantfile并将其作为Vagrant加载过程的一部分读取。有关更多信息,请阅读有关Vagrantfile加载顺序的信息。

https://www.vagrantup.com/docs/cli/package.html

完成后,您将拥有一个package.box文件。

3-复制所有这些文件(/config、/database、Vagrantfile、package.box等),然后将其粘贴到您要安装虚拟机的计算机2上(在我的案例中为D:/ VVV)。

现在,您已经在计算机2主机上拥有了所需的所有内容的副本。

4-运行此: vagrant box add package.box --name VVV

(--name用于命名您的虚拟机。在我的案例中,它名为VVV)(如果您已经有一个使用此名称的虚拟机并想要覆盖它,则可以使用--force。(请小心使用!))

这将解压缩新的无用虚拟机。

5-完成后,运行: vagrant up

机器将安装,您应该在“ Oracle虚拟机盒管理器”上看到它。如果看不到虚拟机,请尝试以管理员身份运行Oracle VM框(右键单击->以管理员身份运行)

现在您可能一切正常,但请记住查看主机是否符合您的预期:

c:/windows/system32/hosts

6-也许将主机文件从计算机1复制到计算机2 是个好主意,或者复制所需的行。就我而言,这些是我需要的主机:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

192.168.50.4是我的虚拟机的IP,而test.dev和vvv.dev正在开发主机。

希望对您有所帮助:)如果您反馈意见,我们将很高兴。

您可能会发现我的案例的一些特殊之处:

当我无所事事时,mysql出现了问题,它无法正常工作。我必须在虚拟服务器上运行(右键单击oracle虚拟机->显示控制台):apt-get install mysql-server

此后,我再次无所事事,一切正常,但数据库中没有数据。因此,我从计算机1进行了mysqldump所有表并将其上载到计算机2。

其他说明: 我的虚拟机不完全位于计算机1和计算机2上。例如,我前段时间进行了内部配置,以使用NFS(以加速服务器同步文件夹),并且需要在计算机2上再次运行此命令主办:vagrant plugin install vagrant-winnfsd



0

截至2019年,有一个子命令: vagrant box repackage

vagrant box repackage --help 
Usage: vagrant box repackage <name> <provider> <version>
    -h, --help                       Print this help

您可以找到name providerversion通过运行vagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

输出的vagrant box repackage是一个称为的文件package.box,它基本上是一个tgz文件,其内容可以列出如下:

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.