如何使用自定义 Vagrant 文件(公共网络、RAM 设置等)打包 Vagrant 盒?

如何使用自定义 Vagrant 文件(公共网络、RAM 设置等)打包 Vagrant 盒?

我打包了一个 VirtualBox,其中包含我想要的所有设置。我将网络设置为“桥接适配器”(Vagrant 称之为“public_network”)。我甚至查看了box.ovf文件.box,它说

$ tar xOf nycmesh-qmp-openwrt.box box.ovf | less
  <NetworkSection>
    <Info>Logical networks used in the package</Info>
    <Network ovf:name="Bridged">
      <Description>Logical network used by this appliance.</Description>

但是当我尝试添加带有的框vagrant box add box-name box.boxinit框时,它就会生成机器没有桥接适配器。它使用 NAT。

我甚至更新了.box文件(这是一个经过 gzip 压缩的 tar 文件),并Vagrantfile用我的自定义文件覆盖Vagrantfile

config.vm.network "public_network"

我重新添加了框(带有--force),vagrant init box-name再次运行,它仍然生成了一个Vagrantfile带有config.vm.network注释的!

所以,如何

Vagrant 2.0.1


这是我在 VirtualBox 中手动创建的 VM 网络:

网络原始节点

我创建了package-the-vagrantfile/Vagrantfile包含

Vagrant.configure("2") do |config|
  config.vm.network "public_network"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "64"
  end
end

根据文档

https://www.vagrantup.com/docs/networking/public_network.html

我将此虚拟机打包

$ vagrant package --base node --vagrantfile package-the-vagrantfile/Vagrantfile

它创建了package.box。我用

$ vagrant init package.box --minimal ; vagrant up

它启动了一个新盒子...

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'package.box'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: node_default_1522176655197_96615
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...

但网络不对

新节点网络

它确实有正确的记忆

记忆

网络指令也在框中。

$ tar -xOf package.box ./include/_Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.network "public_network"
...
$ tar -xOf package.box ./Vagrantfile
Vagrant::Config.run do |config|
...
# Load include vagrant file if it exists after the auto-generated
# so it can override any of the settings
include_vagrantfile = File.expand_path("../include/_Vagrantfile", __FILE__)
load include_vagrantfile if File.exist?(include_vagrantfile)

相关内容