在 file.box 上保存更改 Vagrantfile

Save changes Vagrantfile on file.box

从文件 'test.box' 创建 'Vagrantfile' 后,我将编辑文件 'Vagrantfile' 插入例如:

config.vm.provision: shell, path: './test.sh'

完成后,如何保存对文件的更改test.box?

我不确定我是否完全理解这个问题,但让我解释一下:

Boxes 是 Vagrant 环境的包格式,您可以从文档中阅读有关 boxes 的更多信息 (https://docs.vagrantup.com/v2/boxes.html)

在此框中,vagrant 将使用您定义的 Vagrantfile 创建一个 VM。如果此 Vagrantfile 定义了配置步骤,那么当您初始化 vm 时,这些步骤将是 运行(第一次 运行 vagrant up,您也可以在每次 运行 时定义一个配置程序启动虚拟机)

为了运行每次启动vm时的provisioner,你需要

config.vm.provision :shell, :path => "./test.sh", :run => 'always'

请注意,当您 运行 vagrant halt 停止虚拟机时,您只是关闭了系统,所以您安装的所有内容都保留在虚拟机上,下次您 运行 vagrant up 您在 VM 中创建的所有内容都将可用。 vagrant destroy 确实会从 vm 中完全清除所有文件,因此当您 运行 vagrant up 之后,将从头开始创建 vm

所以现在,如果您对虚拟机进行了更改并想将其用作新盒子,则需要使用 vagrant packagepackage 虚拟机,您可以阅读有关 package 的更多信息。这将生成一个新框,您可以在新的 Vagrantfile 中使用它。

我的目标是 运行 一个文件 shell 每次我 运行 命令 'vagrant up / vagrant provision'。
为此,我执行了以下操作:

  1. 我创建(使用 Packer)文件 'test.box'

  2. 使用命令 'init test.box vagrant' 我创建了 Vagrantfile。

这一步,我编辑文件Vagrantfile 输入,例如:

config.vm.provision: shell, path: './file.sh'

所以每次我运行命令'vagrant up / vagrant provision'他执行"file.sh"。
我的问题是我不明白如何保存此更改。

如果我没理解错的话。
您可以使用您的 vagrantfile,进行所有需要的更改
并在您的 packer.json 文件中添加其他部分:

"post-processors": [ { "type": "vagrant", "keep_input_artifact": false, "compression_level": 1, "vagrantfile_template": "MyCustom.vagrantfile", "output": "box/box_with_custom_vagrantfile.box" } ]