hashicorp/vagrant · error · Vagrant::Errors::BoxUpdateMultiProvider
You requested to update the box '%{name}'. This box has mult
Error message
You requested to update the box '%{name}'. This box has
multiple providers. You must explicitly select a single
provider to update with `--provider`. What it means
Raised by `vagrant box update --box <name>` when the box is installed for more than one provider and no --provider flag was given. After building box_info (a hash keyed by provider -> versions -> architectures), an update would be ambiguous, so Vagrant refuses to pick a provider for you; the message lists the installed providers, sorted.
Source
Thrown at plugins/commands/box/command/update.rb:77
0
end
def update_specific(name, provider, architecture, download_options, force)
box_info = Vagrant::Util::HashWithIndifferentAccess.new
@env.boxes.all.each do |box_name, box_version, box_provider, box_architecture|
next if name != box_name
box_info[box_provider] ||= Vagrant::Util::HashWithIndifferentAccess.new
box_info[box_provider][box_version] ||= []
box_info[box_provider][box_version].push(box_architecture.to_s).uniq!
end
if box_info.empty?
raise Vagrant::Errors::BoxNotFound, name: name.to_s
end
if !provider
if box_info.size > 1
raise Vagrant::Errors::BoxUpdateMultiProvider,
name: name.to_s,
providers: box_info.keys.map(&:to_s).sort.join(", ")
end
provider = box_info.keys.first
elsif !box_info[provider]
raise Vagrant::Errors::BoxNotFoundWithProvider,
name: name.to_s,
provider: provider.to_s,
providers: box_info.keys.map(&:to_s).sort.join(", ")
end
version = box_info[provider].keys.sort_by{ |v| Gem::Version.new(v) }.last
architecture_list = box_info[provider][version]
if !architecture
if architecture_list.size > 1
raise Vagrant::Errors::BoxUpdateMultiArchitecture,View on GitHub (pinned to 35f3160f4a)
Solutions
- Add --provider matching one of the listed names: `vagrant box update --box mybox --provider virtualbox`
- Check `vagrant box list` to see which providers are installed for the box
- Pin the provider in automation scripts to keep updates deterministic
Example fix
# before vagrant box update --box mybox # error: multiple providers, must select one # after vagrant box update --box mybox --provider virtualbox
Defensive patterns
Strategy: validation
Validate before calling
# bash: require --provider when the box spans multiple providers
providers=$(vagrant box list | awk -v b="$BOX" '$1==b {gsub(/[(),]/,"",$2); print $2}' | sort -u)
if [ "$(printf '%s\n' "$providers" | wc -l)" -gt 1 ]; then
[ -n "$PROVIDER" ] || { echo "box $BOX has multiple providers: $providers"; exit 1; }
vagrant box update --box "$BOX" --provider "$PROVIDER"
else
vagrant box update --box "$BOX"
fi Prevention
- Always pass --provider in shared/CI update scripts for determinism
- Check `vagrant box list` for duplicated names across providers before scripting updates
- Standardize the team on one provider per project Vagrantfile where possible
When it happens
Trigger: `vagrant box update --box mybox` where mybox is installed for e.g. both virtualbox and vmware_desktop; box_info.size > 1 with no --provider flag.
Common situations: Teams sharing a Vagrantfile across host platforms; boxes mirrored across providers; scripts written against a single-provider setup later run on multi-provider installs.
Related errors
- The box '%{name}' isn't installed for the provider '%{provid
- You requested to update the box '%{name}' (v%{version}) with
- The box '%{name}' is not a versioned box. The box was added
- The box you attempted to add doesn't match the provider you
- The box '%{name}' does not exist. Please double check and tr
AI-assisted analysis of hashicorp/vagrant@35f3160f4a (2026-08-21).
Data as JSON: /api/errors/c1a064d15dc693f0.
Report an issue: GitHub.