Vagrant创建Ubuntu 24.04虚拟机的两个问题求助:provision.sh未执行及命令顺序咨询
Vagrant创建Ubuntu 24.04虚拟机的两个问题求助:provision.sh未执行及命令顺序咨询
嘿,我看了你的问题,核心问题出在Vagrantfile里的provision配置写法和位置上,先帮你拆解一下:
首先,你当前的Vagrantfile里,把provision脚本的配置放到了vmware_desktop的provider块里,而且写法还错了——应该用config.vm.provision而不是v.vm.provision。这就导致两个问题:一是只有用VMware Desktop作为provider时才会尝试加载这个配置,二是因为写法错误,哪怕用VMware也不会真正执行脚本;如果用VirtualBox启动,完全不会触发provision步骤。
先把你提供的两个文件整理出来:
你的Vagrantfile内容:
Vagrant.configure("2") do |config| config.vm.box = "apavy/ubuntu-24.04-desktop-amd64" config.vm.provider "vmware_desktop" do |v| v.gui = true end config.vm.provider "virtualbox" do |v| v.memory = 2048 v.cpus = 2 v.name = "my_vm" v.gui = true v.check_guest_additions = false end # Provisioning Script config.vm.provider "vmware_desktop" do |v| v.vm.provision :shell, path: "provision.sh" end end
你的provision.sh内容:
#!/usr/bin/env bash # 这里是你的配置命令(你提到的Change...内容)
解决步骤:
- 修正Vagrantfile的provision配置
把provision的配置从provider块中移出来,放到全局的config块里,这样不管你用VirtualBox还是VMware Desktop启动,都会执行provision脚本。修正后的Vagrantfile如下:
Vagrant.configure("2") do |config| config.vm.box = "apavy/ubuntu-24.04-desktop-amd64" config.vm.provider "vmware_desktop" do |v| v.gui = true end config.vm.provider "virtualbox" do |v| v.memory = 2048 v.cpus = 2 v.name = "my_vm" v.gui = true v.check_guest_additions = false end # 全局配置provision脚本,所有provider都会触发执行 config.vm.provision :shell, path: "provision.sh" end
- 确保provision.sh有可执行权限
在你的主机终端里,进入Vagrantfile所在目录,执行命令给脚本加权限:
chmod +x provision.sh
- 重新触发provision
如果你之前已经启动过虚拟机,需要重新执行provision步骤,可以直接运行:
vagrant provision
或者销毁现有虚拟机后重新创建(确保所有配置生效):
vagrant destroy -f && vagrant up
额外检查点:
- 确认
provision.sh和Vagrantfile在同一个目录下,路径没有拼写错误; - 启动虚拟机时留意Vagrant的终端输出,如果有provision相关的错误(比如找不到脚本、权限不足),可以根据日志进一步排查。
备注:内容来源于stack exchange,提问作者Blue Grass
相关产品推荐
相关产品推荐

