我使用的是版本控制的盒子,但没有使用 Vagrant Cloud(我有一个自定义盒子主机)。下载版本控制的盒子效果很好。
但是,当我在本地开发盒子的新版本时,我不希望每次想要升级 Vagrant 中加载的盒子版本时都要经历上传/下载循环。换句话说,我想运行vagrant box add
,同时指定较新的版本和本地文件。
vagrant box add
似乎有一个选项--box-version
,但这是用于限制正在下载的盒子的版本,而不是用于指定正在添加的盒子的版本。无论如何尝试指定 box-version 都会导致:
您指定了带有直接 box 文件路径的 box 版本约束。box 版本约束仅适用于来自 Vagrant Cloud 或自定义 box 主机的 box。请删除版本约束并重试。
但我并不想限制我正在添加;我正在尝试指定。任何形式的 box add 似乎都会将版本设置为 0。有什么方法可以解决这个问题并告诉 Vagrant 我正在添加哪个版本?
答案1
基于此回答,为了给本地盒子指定一个版本,您需要创建一个metadata.json
。
该文件的最小内容如下:
{
"name": "USERNAME/BOXNAME",
"versions": [{
"version": "X.Y.Z",
"providers": [{
"url": "package.box"
}]
}]
}
其中 是package.box
相对路径metadata.json
此后,您只需运行即可vagrant box add metadata.json
添加一个带有版本的新框。
警告:
Vagrant 将metadata.json
URL 存储在文件中~/.vagrant.d/boxes/FULLBOXNAME/metadata_url
。因此,请谨慎使用名称,您不能使用来自不同来源的相同名称。
答案2
导入盒子文件后
cd ~/.vagrant.d/boxes/<用户名>-VAGANTSLASH-<盒子名称>/
mv 0 <指定版本>
答案3
您需要将提供商名称添加为“virtualbox”,例如
"providers": [{
"name": "virtualbox",
"url": ...