如何将已下载的.box文件添加到Vagrant中?

136

如何将已下载的.box文件添加到Vagrant可用箱子的列表中?这个.box文件保存在一个外部驱动器上。

我尝试运行vagrant box add my-box d:/path/to/box,但Vagrant将路径解释为URL。


你能否发布完整的输出以及vagrant版本?理论上,使用本地文件路径,vagrant box add应该可以完美运行。 - Emyl
3
我在使用Ubuntu,执行vagrant box add my-box /path/to/file.box命令运行正常。 - maan81
8个回答

205

解决方案:

vagrant box add my-box file:///d:/path/to/file.box

必须符合URL格式。


8
如果我使用 vagrant box add my-box ./path/to/mybox.box 命令,会发生什么? - Rakib
你也可以使用 -f 参数来强制重新下载并替换已存在的 Vagrant Box。例如:vagrant box add -f my-box http://some-url - Brad Parks
Vagrant在macOS和Linux下(2.2.2)可以使用nun URI路径,因此至少可以省略方案file://。也许这是一个特定于版本的更改或者它是Windows特定的,我更倾向于后者。 - Eugen Mayer

105
你可以指向Vagrant所在的文件夹,并将盒子文件复制到相同的位置。然后你可以按如下方式运行。
vagrant box add my-box name-of-the-box.box
vagrant init my-box
vagrant up

只是想查看状态

vagrant status

我运行了vagrant initvagrant up,我的vagrant虚拟机正在运行。但我无法通过SSH连接。当我运行 vagrant ssh 时,它会显示“您正在尝试SSH登录的机器已配置为使用基于密码的身份验证。 Vagrant无法为您输入密码。如果提示输入密码,请输入在Vagrantfile中配置的相同密码。”,但我没有在Vagrantfile中配置任何内容。我只是使用自动创建的Vagrantfile。 当我运行cat Vagrantfile时,我找不到任何称为密码或pem或任何东西的东西。 - Rakib
如果在使用公共基础镜像时,vagrant ssh 要求输入密码,那么很有可能密码是 vagrant - codewario
我遇到了相同的错误,而且密码vagrant也没有解决它。 - Karim Samir
modern.ie Microsoft 盒子的密码是 Passw0rd! - Redsandro
对于那些无法进行ssh连接的用户,问题源自于虚拟机导出。您需要重新将Vagrant不安全的公钥添加到已授权密钥中。请参考 https://dev59.com/a10a5IYBdhLWcg3wqaNS。 - MakisH

28

尝试切换到保存.box文件的目录。

运行vagrant box add my-box downloaded.box,这可能会起作用,因为它避免了绝对路径(在Windows上?)的问题。


我执行了 vagrant initvagrant up 命令,我的 vagrant box 已经运行起来了。但是我无法通过 ssh 连接。当我执行 vagrant ssh 命令时,它会显示 "The machine you're attempting to SSH into is configured to use password-based authentication. Vagrant can't script entering the password for you. If you're prompted for a password, please enter the same password you have configured in the Vagrantfile.",而我在 Vagrantfile 中没有配置任何内容。我只是使用了 vagrant init 命令自动创建的 Vagrantfile。当我执行 cat Vagrantfile 命令时,我没有看到任何称为密码或 pem 或其他任何东西的内容。 - Rakib

11

如果不想使用下载的盒子,可以创建一个包含元数据的json文件。这样可以应用一些额外的细节。例如,要导入盒子并指定其版本,请创建文件:

{
  "name": "laravel/homestead",
  "versions": [
    {
      "version": "7.0.0",
      "providers": [
        {
          "name": "virtualbox",
          "url": "file:///path/to/box/virtualbox.box"
        }
      ]
    }
  ]
}

然后使用参数运行vagrant box add命令:

vagrant box add laravel/homestead /path/to/metadata.json

终于有解决方案了。谢谢。 - Faizan Anwer Ali Rupani

10

解决Windows系统的方法:

  • 以管理员身份打开cmd或powershell
  • 进入包含.box文件的文件夹
  • vagrant box add --name 我的盒子名称 '我的盒子名称.box'
  • vagrant box list应该会在列表中显示新添加的盒子

解决MAC系统的方法:

  • 打开终端
  • 进入包含.box文件的文件夹
  • vagrant box add --name 我的盒子名称 "./我的盒子名称.box"
  • vagrant box list应该会在列表中显示新添加的盒子

5

首先将Vagrantfile文件重命名,然后

vagrant box add new-box name-of-the-box.box
vagrant init new-box
vagrant up

只是检查状态

vagrant status

that's all


3
F:\PuppetLab\src\boxes>vagrant box add precise32 file:///F:/PuppetLab/src/boxes/precise32.box
==> box: Adding box 'precise32' (v0) for provider:
    box: Downloading: file:///F:/PuppetLab/src/boxes/precise32.box
    box: Progress: 100% (Rate: 1200k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'precise32' (v0) for 'virtualbox'!

1

只是为另一个案例添加描述。我需要在多个Ubuntu机器上安装类似的基于Vagrant Ubuntu 18.04的配置。使用vagrant upVagrantfile下载bionic64 box到一个机器上,然后将文件夹.vagrant.d/boxes/ubuntu-VAGRANTSLASH-bionic64复制到其他机器上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接