{"record":{"id":"e01e59160d1cfa4e","repo":"hashicorp/vagrant","slug":"multiple-urls-for-a-box-can-t-be-specified-when-ad","errorCode":null,"errorMessage":"Multiple URLs for a box can't be specified when adding\nversioned boxes. Please specify a single URL to the box\nmetadata (JSON) information. The full list of URLs you\nspecified is shown below:\n\n%{urls}","messagePattern":"Multiple URLs for a box can't be specified when adding\nversioned boxes\\. Please specify a single URL to the box\nmetadata \\(JSON\\) information\\. The full list of URLs you\nspecified is shown below:\n\n%(.+?)","errorType":"exception","errorClass":"Vagrant::Errors::BoxAddMetadataMultiURL","httpStatus":null,"severity":"warning","filePath":"lib/vagrant/action/builtin/box_add.rb","lineNumber":152,"sourceCode":"            if is_error\n              raise Errors::BoxAddShortNotFound,\n                error: is_error.extra_data[:message],\n                name: env[:box_url],\n                url: url\n            end\n          end\n\n          is_error = is_metadata_results.find do |b|\n            b.is_a?(Errors::DownloaderError)\n          end\n          if is_error\n            raise Errors::BoxMetadataDownloadError,  \n              message: is_error.extra_data[:message]\n          end\n\n          is_metadata = is_metadata_results.any? { |b| b === true }\n          if is_metadata && url.length > 1\n            raise Errors::BoxAddMetadataMultiURL,\n              urls: url.join(\", \")\n          end\n\n          if is_metadata\n            url = [url.first, authed_urls.first]\n            add_from_metadata(url, env, expanded)\n          else\n            add_direct(authed_urls, env)\n          end\n\n          @app.call(env)\n        end\n\n        # Adds a box file directly (no metadata component, versioning,\n        # etc.)\n        #\n        # @param [Array<String>] urls\n        # @param [Hash] env","sourceCodeStart":134,"sourceCodeEnd":170,"githubUrl":"https://github.com/hashicorp/vagrant/blob/35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5/lib/vagrant/action/builtin/box_add.rb#L134-L170","documentation":"DockerProvisioner::Installer#ensure_installed (installer.rb:14-19) first asks `@machine.guest.capability?(:docker_installed)`. When the detected guest plugin does not register that capability, Vagrant warns \"Vagrant doesn't support detecting whether Docker is installed for the guest OS running in the machine. Vagrant will assume it is installed and attempt to continue.\" and returns false — the install step is skipped entirely. Later docker provisioner actions (pull/build/run) then only work if Docker really is present in the box.","triggerScenarios":"Using the docker provisioner (`config.vm.provision \"docker\"`) on a base box whose guest OS is not mapped to a guest plugin implementing docker_installed — niche, custom, or very new distros, or boxes whose OS detection files confuse Vagrant's guest detection.","commonSituations":"Hand-rolled Packer/minimal boxes lacking the distro markers Vagrant detects; a new Ubuntu/Debian/Fedora point release before guest plugin updates; the result that Docker is genuinely absent, so `vagrant up` later fails inside docker pull/build with 'docker: command not found' style errors.","solutions":["Verify Docker is actually in the guest: `vagrant ssh -c 'command -v docker && docker --version'`.","If absent, install it yourself before the docker provisioner: a shell provisioner running the get.docker.com script or `apt-get install docker.io`.","Switch to a base box with supported guest detection (e.g. bento/ubuntu-*, roboxes) so capability?(:docker_installed) returns true.","Upgrade Vagrant — newer releases add docker_installed capabilities for more guests."],"exampleFix":"# Vagrantfile — before\nconfig.vm.provision \"docker\" do |d|\n  d.pull_image \"nginx\"\nend\n\n# after (guest without docker_installed capability: install explicitly)\nconfig.vm.provision \"shell\", inline: \"command -v docker >/dev/null || (curl -fsSL https://get.docker.com | sh)\"\nconfig.vm.provision \"docker\" do |d|\n  d.pull_image \"nginx\"\nend","handlingStrategy":"validation","validationCode":"# Pre-flight: does the guest expose docker and is it actually installed?\nvagrant ssh -c 'command -v docker && docker --version'","typeGuard":"# Where you hold a machine object (plugin/pry context)\ndef docker_verifiable?(machine)\n  machine.guest.capability?(:docker_installed)\nend","tryCatchPattern":null,"preventionTips":["Prefer mainstream base boxes (bento/*, roboxes/*) so guest detection and the docker_installed capability resolve.","Bake Docker into custom Packer templates instead of relying on Vagrant's capability-based install.","Keep Vagrant current — guest capability coverage grows every release."],"tags":["docker","vagrant","guest-detection","provisioning"],"backgroundTag":"guest-capability-unsupported","analyzedSha":"35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5","analyzedAt":"2026-08-21T13:34:32.514Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}