我打包了一个 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.box
和init
框时,它就会生成机器没有桥接适配器。它使用 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)