参考:
- 手工下载和导入vagrant镜像
- How to add a downloaded .box file to Vagrant?
由于国内网络的问题,下载Vagrant镜像非常的困难。明明我已经开了全局代理并且curl到了vagrantcloud,但是就是拉不下来镜像……无奈之下只能自力更生,直接搜索然后下载,比如这个RancherOS。我所进行的实验是Vagrant快速部署k8s,因为实验室服务器不够了,没有抵挡地住诱惑。
或者也可以查看使用vagrant up
获得的信息(如下),其中URL即为下载地址。
Bringing machine 'server-01' up with 'virtualbox' provider...
Bringing machine 'node-01' up with 'virtualbox' provider...
Bringing machine 'node-02' up with 'virtualbox' provider...
==> server-01: Box 'chrisurwin/RancherOS' could not be found. Attempting to find and install...
server-01: Box Provider: virtualbox
server-01: Box Version: 1.5.1
==> server-01: Loading metadata for box 'chrisurwin/RancherOS'
server-01: URL: https://vagrantcloud.com/chrisurwin/RancherOS
==> server-01: Adding box 'chrisurwin/RancherOS' (v1.5.1) for provider: virtualbox
server-01: Downloading: https://vagrantcloud.com/chrisurwin/boxes/RancherOS/versions/1.5.1/providers/virtualbox.box
搜索并获取镜像
如前面所提到,直接到官网上可以搜索到对应的box。可以使用各种离线下载工具把它弄下来,因为不大我直接用浏览器下载了。
导入镜像
我所使用的环境是vagrant 2.2.16在win10下。一个非常麻烦的原因是这个版本有个bug,所以必须使用绝对路径不能用相对路径。
新建一个metadata.json放在下载好的box旁边。将box重命名为virtualbox.box
代码语言:javascript复制{
"name": "chrisurwin/RancherOS",
"versions": [{
"version": "1.5.1",
"providers": [{
"name": "virtualbox",
"url": "file:///C:/Users/wtyso/Downloads/virtualbox.box"
}]
}]
}
代码语言:javascript复制PS:其中file内一定要有三个斜杠,不然会报错……但是我不能理解为什么一个斜杠又可以,而且转义不应该是吗。有点懵
接下来,在当前目录下执行命令vagrant box add C:UserswtysoDownloadsmetadata.json
终于可以看到好消息:
==> box: Loading metadata for box 'C:UserswtysoDownloadsmetadata.json'
box: URL: file:///C:/Users/wtyso/Downloads/metadata.json
==> box: Adding box 'chrisurwin/RancherOS' (v1.5.1) for provider: virtualbox
box: Unpacking necessary files from: file:///C:/Users/wtyso/Downloads/virtualbox.box
box:
==> box: Successfully added box 'chrisurwin/RancherOS' (v1.5.1) for 'virtualbox'!
运行vagrant box list
查看结果
(base) PS C:UserswtysoDownloads> vagrant box list
chrisurwin/RancherOS (virtualbox, 1.5.1)
可喜可贺可喜可贺,如此就基本完结了。
原作者还提到,如果没有版本号可以使用vagrant box add centos/7 --box-version 1605.01 file://virtualbox.box
的方式导入,我就不赘述了。