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

  1. Add --provider matching one of the listed names: `vagrant box update --box mybox --provider virtualbox`
  2. Check `vagrant box list` to see which providers are installed for the box
  3. 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

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


AI-assisted analysis of hashicorp/vagrant@35f3160f4a (2026-08-21). Data as JSON: /api/errors/c1a064d15dc693f0. Report an issue: GitHub.