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

时间:2013-12-19 10:24:28

标签: virtual-machine virtualbox vagrant

我有一个流浪盒正在运行(配置了LAMP堆栈)。我需要将它转移到另一台PC。我该如何出口? 我想我可以得到一个可以复制到另一台PC的文件(或文件),所以我可以运行一些命令来导入流浪盒。

7 个答案:

答案 0 :(得分:110)

你有两种方法可以做到这一点,我会称之为脏的方式干净的方式

<强> 1。 方式

使用vagrant package命令从当前虚拟环境创建一个框:

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

然后将该框复制到另一台电脑,使用vagrant box add添加,并照常使用vagrant up运行。

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

<强> 2。 clean 方式

理论上,永远不需要使用Vagrant进行导出/导入。如果您有远见使用配置来配置虚拟环境(chef,puppet,ansible),以及像工作目录的git这样的版本控制系统,那么复制环境就像运行一样简单:

git clone <your_repo>
vagrant up

答案 1 :(得分:26)

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

  • 我是Mac上的虚拟盒w / vagrant
  • 我正在使用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添加中遇到了一些问题。

enter image description here

我修复了它们with this solution

答案 2 :(得分:14)

这实际上很简单

  1. 在远程计算机上安装virtual boxvagrant
  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

答案 3 :(得分:6)

最简单的方法是打包Vagrant框,然后将其复制(例如scprsync)到另一台PC,添加它并vagrant up; - )

有关详细步骤,请查看=> Is there any way to clone a vagrant box that is already installed

答案 4 :(得分:1)

所述

How can I change where Vagrant looks for its virtual hard drive?

虚拟机状态存储在预定义的VirtualBox文件夹中。将vagrant-project之外的相应计算机(文件夹)复制到其他主机应保留虚拟机状态。

答案 5 :(得分:1)

上述答案都不适合我。我已经有2天时间将Vagrant + VirtualBox机器从计算机迁移到另一台......这是可能的!

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

您需要做什么:

1-打开计算机1主机的CMD (命令行。使用右键打开管理员 - &gt;“以管理员身份运行”)并转到流浪汉安装的文件。在我的情况下:C:/ VVV 您将看到您的Vagrantfile以及这些文件夹:

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

/ www /文件夹是我的开发域名的同步文件夹。你可能在其他地方有你的同步文件夹,只要一定要了解你在做什么。 / config和/ database也是同步文件夹。

2-运行此命令: vagrant package --vagrantfile Vagrantfile

(此命令使用Vagrantfile配置执行虚拟机的程序包。)

以下是关于该命令的Vagrant文​​档的内容:

  

一个常见的误解是--vagrantfile选项将打包a   当vagrant init与此框一起使用时使用的Vagrantfile。这个   事实并非如此。相反,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框(右键单击 - &gt;以管理员身份运行)

现在你可能已经把一切都搞定了,但要记住你的主机是否符合预期:

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正在开发主机。

我希望这可以帮助你:)如果你反馈你的话,我会很高兴。

您可能会发现我的案例的一些特殊情况:

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

在此之后,我再次跑了,并且一切正常,但没有关于数据库的数据。所以我从计算机1做了一个mysqldump all-tables并将它们上传到Computer 2。

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

答案 6 :(得分:0)

从2019年开始,有一个子命令:vagrant box repackage

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

通过运行name可以找到provider versionvagrant 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