如何导出 Vagrant 虚拟机进行传输
Posted
技术标签:
【中文标题】如何导出 Vagrant 虚拟机进行传输【英文标题】:How to export a Vagrant virtual machine to transfer it 【发布时间】:2014-01-07 20:46:23 【问题描述】:我有一个 vagrant box 正在运行(配置了 LAMP 堆栈)。我需要把它转移到另一台电脑上。我怎样才能导出它? 我想我可以得到一个可以复制到另一台 PC 的文件(或多个文件),所以我可以在那里运行一些命令来导入 vagrant box。
【问题讨论】:
我写了一些脚本来自动转移流浪者盒子。见soniah/transfer_vagrant_boxes // , 有人试过 Sonia 的脚本吗? @NathanBasanese AFAIU,这些脚本帮助转移基本盒子,而不是生成的运行虚拟机,因为它们使用了 vagrant box repackage(请参阅其文档) Is there any way to clone a vagrant box that is already installed的可能重复 【参考方案1】:你有两种方法可以做到这一点,我称之为dirty way和clean way:
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
【讨论】:
努力成为那个干净,有远见的管理员......你不必在你的git repo中放置操作系统安装iso吗?例如,您是否建议这样做。使用 ansible,您的 repo 将包含 Vagrantfile 和 ansible playbook。 Vagrantfile 将 1. 从 vagrantcloud 下载 basebox 2. 运行 ansible playbook 以使用其他文件/repos/cloud-storage 配置/配置 basebox。正确的?还是 git repo 中还有其他内容? “干净的方式”是否考虑了可能位于 vm 内部的数据库(mysql、Wordpress)?如何同步到另一台电脑? @kevllar 干净的方式意味着在 git 存储库之外没有启动新开发环境所需的信息。这意味着安装和配置数据库将在配置新的 vagrant box 期间完成(通过 Chef/Puppet/what-have-you)。 那么Hashicorp推荐的方式也“脏”吗?即打包盒子并上传到atlas服务器?我不确定“干净”的方式是否真的会复制确切的环境,我认为这是 vagrant 的全部目的...... 我不明白官方的方式怎么被认为是肮脏的。哪位好心人能解释一下原因?【参考方案2】:我的 Mac 中的硬盘在进行项目时发出哔哔声,因此我决定安装 SSD。我需要将我的项目从一个磁盘移动到另一个磁盘。需要考虑的几点:
我是在 Mac 上使用 virtualbox 的流浪汉 我正在使用 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 来宾时遇到了一些问题。
我修复了它们with this solution。
【讨论】:
//,我要试试这个,@KJPrince。感谢您为我们分解它。 // ,我试过了,但是当我将 VirtualBoxVMs 目录复制到 ~/VirtualBox\ VMs 并运行vagrant box list
: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/… 时,出现以下链接的错误跨度>
【参考方案3】:
其实很简单
-
在远程机器上安装virtual box和vagrant
收拾你的流浪机器
vagrant package --base [machine name as it shows in virtual box] --output /Users/myuser/Documents/Workspace/my.box
将盒子复制到遥控器
通过运行在远程机器上初始化盒子
vagrant init [machine name as it shows in virtual box] /Users/myuser/Documents/Workspace/my.box
运行vagrant up
【讨论】:
如果您的机器名称很长,并且您懒得查看 Virtualbox GUI 并输入它的名称或 ID - 您可以使用以下终端命令列出所有 VM 的名称和 ID:VBoxManage list vms
。在您可以复制并执行@Phil 2nd 和 4th 步骤中的操作之后。 :) 是的。
@Sid 为什么不只是 $ vagrant box list
@KenRatanachaiS 因为您的命令列出了框,例如:(scotch/box (virtualbox, 3.0)
)。我的命令 - 带有标识符的虚拟机,例如:"Win10 - SandBox" bc251c06-501f-4c0f-bgfa-21f2815ba2cd
【参考方案4】:
最简单的方法是打包 Vagrant 盒子,然后将其复制(例如 scp
或 rsync
)到另一台 PC,添加它并添加 vagrant up
;-)
详细步骤请查看=>
Is there any way to clone a vagrant box that is already installed
【讨论】:
【参考方案5】:以上答案都不适合我。我已经花了 2 天时间研究如何将 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 被加载并作为 使用 box 时的 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。(小心使用!))
这将解压您的新 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 时,mysql 出现问题,它无法正常工作。我必须在虚拟服务器上运行(右键单击oracle虚拟机->显示控制台):apt-get install mysql-server
在此之后,我再次 vagrant up,一切正常,但数据库中没有数据。所以我从计算机 1 做了一个 mysqldump 所有表并将它们上传到计算机 2。
其他说明: 我的虚拟机并不完全在计算机 1 和计算机 2 上。例如,我前段时间进行了内部配置以使用 NFS(加速服务器同步文件夹),我需要在计算机 2 主机上再次运行此命令:@ 987654329@
【讨论】:
【参考方案6】:如中所述
How can I change where Vagrant looks for its virtual hard drive?
虚拟机状态存储在预定义的 VirtualBox 文件夹中。将除了您的 vagrant-project 之外的相应机器(文件夹)复制到您的其他主机应该保留您的虚拟机状态。
【讨论】:
【参考方案7】:我还必须从 .vagrant/machines/default/virtualbox 文件夹中复制 private_key 文件,以便 vagrant ssh 工作
【讨论】:
【参考方案8】:截至 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
【讨论】:
以上是关于如何导出 Vagrant 虚拟机进行传输的主要内容,如果未能解决你的问题,请参考以下文章