我有一个已配置好 LAMP 技术栈的 Vagrant 虚拟机正在运行中。我需要将其转移到另一台电脑。如何导出它? 我猜我可以得到一个文件(或多个文件),可以将其复制到另一台电脑,然后在那里运行一些命令以导入 Vagrant 虚拟机。
我有一个已配置好 LAMP 技术栈的 Vagrant 虚拟机正在运行中。我需要将其转移到另一台电脑。如何导出它? 我猜我可以得到一个文件(或多个文件),可以将其复制到另一台电脑,然后在那里运行一些命令以导入 Vagrant 虚拟机。
你有两种方法可以做到这一点,我将其称为肮脏方式和清洁方式:
1. 肮脏的方式
使用vagrant package
命令从当前的虚拟环境创建一个盒子:
http://docs.vagrantup.com/v2/cli/package.html
然后将盒子复制到另一台计算机上,使用vagrant box add
添加它,并像往常一样使用vagrant up
运行。
请记住,当虚拟机启动时,工作目录中的文件(带有Vagrantfile
的目录)是共享的,因此您还需要将其复制到其他计算机上。
2. 清洁的方式
理论上来说,使用Vagrant不应该需要导出/导入。如果您有预见性地使用配置虚拟环境的自动化工具(如chef、puppet、ansible)和版本控制系统(如git)来管理您的工作目录,那么在这一点上复制一个环境将变得非常简单,只需运行:
git clone <your_repo>
vagrant up
我的Mac电脑中的硬盘在进行项目时发出嘟嘟声,所以我决定安装SSD。我需要将项目从一个磁盘移动到另一个磁盘。需要考虑几个问题:
这是对我有效的方法:
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的客户端附加组件时遇到了几个问题。
我通过这个解决方案修复了它们。
vagrant box list
时,我在以下链接中遇到了错误:http://0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/Kb0w890ol0mn0sGyltc - Nathan Basanese这其实相当简单
封装你的Vagrant虚拟机
vagrant package --base [虚拟机名称,与VirtualBox中显示的名称一致] --output /Users/myuser/Documents/Workspace/my.box
将.box文件复制到远程机器
在远程机器上运行以下命令初始化.box文件
vagrant init [虚拟机名称,与VirtualBox中显示的名称一致] /Users/myuser/Documents/Workspace/my.box
运行 vagrant up
VBoxManage list vms
。之后,您只需复制并执行@Phil第2步和第4步中所述的操作即可。 :) 是的。 - Sidscotch/box (virtualbox, 3.0)
)。我的命令是使用标识符的虚拟机,例如:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}。 - Sidscp
或rsync
)到另一台计算机上,在该计算机上添加并执行vagrant up
即可。更详细的步骤请查看=>
如何克隆已安装的Vagrant box?。以上答案都不适用于我。我已经花了两天时间研究如何将一个 Vagrant + VirtualBox 虚拟机从一台电脑迁移到另一台电脑...... 这是有可能的!
首先,您需要了解虚拟机与您的同步/共享文件夹是分开的。因此,当您打包虚拟机时,您是不带有文件,但是带有数据库。
您需要做的事情:
1- 打开计算机 1 主机 CMD (命令行。使用正确按钮将其作为管理员打开 ->“以管理员身份运行”),然后转到您的 vagrant 安装文件夹。在我的情况下:C:/VVV 您将看到您的 Vagrantfile 和这些文件夹:
/config/
/database/
/log/
/provision/
/www/
Vagrantfile
...
/www/文件夹是我存放开发域的同步文件夹。您可能将同步文件夹放在其他位置,但一定要确保了解自己在做什么。此外/config和/database也是同步文件夹。
2- 运行以下命令:vagrant package --vagrantfile Vagrantfile
(此命令使用您的Vagrantfile配置打包虚拟机。)
以下是有关该命令的Vagrant文档中的描述:
一个常见的误解是--vagrantfile选项将打包一个 在使用此框时与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) (如果您已经有一个名为VVV的虚拟机并想要覆盖它,请使用--force。(小心使用!))
这将解压缩您的新vagrant虚拟机。
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是开发主机。
希望这能帮到你 :) 如果您有任何反馈,请告诉我。
我遇到的一些特殊情况:
当我运行vagrant up时,mysql出了问题,无法正常工作。 我不得不在虚拟服务器上运行以下命令(右键单击Oracle虚拟机 ->显示控制台):apt-get install mysql-server
之后,我再次运行vagrant up,一切都正常工作,但数据库中没有数据。 所以我从计算机1中使用mysqldump all-tables导出所有表,并将它们上传到计算机2中。
其他注意事项:
我的虚拟机并不完全位于计算机1和计算机2上。 例如,我之前进行了内部配置以使用NFS(加快服务器同步文件的速度),我需要在计算机2主机上再次运行此命令:vagrant plugin install vagrant-winnfsd
正如我该如何更改Vagrant查找其虚拟硬盘的位置?中所述,虚拟机状态存储在预定义的VirtualBox文件夹中。将相应的机器(文件夹)复制到您的vagrant项目旁边的其他主机上,应该可以保留您的虚拟机状态。
我不得不将我的Vagrant虚拟机迁移到新的机器上,并发现了这种肮脏但简单的方法可以很好地工作(它适用于基于VirtualBox的虚拟机,我认为它可以适应其他提供程序):
.vagrant/machines/default/virtualbox/id
文件到新的VirtualBox ID(通过VBoxManage list vms
获取)。我还需要从.vagrant/machines/default/virtualbox文件夹中复制private_key文件,以便vagrant ssh正常工作
截至2019年,有一个子命令:vagrant box repackage
vagrant box repackage --help
Usage: vagrant box repackage <name> <provider> <version>
-h, --help Print this help
您可以通过运行 vagrant box list
命令来查找 name
、provider
和 version
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