Бродяга и Докер не играют хорошо

Обновление:. Я удалил как Vagrant, так и Docker, и буду принимать любой ответ, который поможет мне переустановить оба из них таким образом, чтобы:

  • Я могу запустить Vagrant без какой-либо зависимости от Docker; и
  • Я могу запускать Docker без какой-либо зависимости от Vagrant; и
  • Я могу запустить Vagrant и использовать Docker в качестве поставщика поддержки

Если вы посмотрите на исходный код Vagrant, вы увидите, что моя ошибка исходит из этой строки кода, которая для поставщиков VirtualBox, происходит от этого метода usable, создающего ошибку. Этот метод usable вызывает ошибку, если он считает, что VirtualBox имеет недопустимую версию (VirtualBoxInvalidVersion) или если ее не обнаружено в локальной системе (VirtualBoxNotDetected).

Не будучи разработчиком Ruby, мне сейчас становится трудно понять, как Vagrant решает выбросить одну из этих двух ошибок. Но я думаю, что я приближаюсь к выяснению, почему Docker запускает мою конфигурацию Vagrant/VirtualBox.


Оригинальный вопрос:

Mac здесь. Несколько дней назад я установил Vagrant и VirtualBox следующим образом:

brew cask install virtualbox
brew cask install vagrant
brew cask install vagrant-manager

..., который достал его и без проблем справился. Мне удалось vagrant init hashicorp/precise32; vagrant up, и все выглядело так, как будто оно работает отлично (hashicorp/precise32 по умолчанию использует VirtualBox).

Затем прошлой ночью я установил Docker, который также требует VirtualBox, и он запускается и работает без каких-либо проблем. Я даже смог получить примеры контейнеров whalesay. Пока все хорошо.

Сегодня я пошел играть в Vagrant, и похоже, что моя установка Docker закрыла мою конфигурацию Vagrant/VirtualBox.

Теперь, когда я запускаю vagrant init hashicorp/precise32 в пустом каталоге, а затем запускаю vagrant up, я получаю:

[email protected]:~/sandbox/myapp$vagrant up
No usable default provider could be found for your system.

Vagrant relies on interactions with 3rd party systems, known as
"providers", to provide Vagrant with resources to run development
environments. Examples are VirtualBox, VMware, Hyper-V.

The easiest solution to this message is to install VirtualBox, which
is available for free on all major platforms.

If you believe you already have a provider available, make sure it
is properly installed and configured. You can see more details about
why a particular provider isn't working by forcing usage with
`vagrant up --provider=PROVIDER`, which should give you a more specific
error message for that particular provider.

Итак, я попробовал указать тип провайдера, хотя мне и не нужно, чтобы посмотреть, что произойдет:

[email protected]:~/sandbox/myapp$vagrant up --provider=VirtualBox
The provider 'VirtualBox' could not be found, but was requested to
back the machine 'cortex'. Please use a provider that exists.

И только для хорошей оценки, запуск vagrant -v выводит Vagrant 1.7.2 в качестве вывода.

Любые идеи, что пошло наперекосяк и какое исправление?

Ответ 1

Вагрант заботится о случае (по крайней мере, Vagrant 1.8.1 делает), поэтому используйте нижний регистр для имени провайдера:

vagrant up --provider=virtualbox

Я думаю, что сообщение об ошибке 1.8.1 гораздо более полезно:

$ vagrant up --provider=VirtualBox  # NOTE: this is the WRONG capitalization
An active machine was found with a different provider. Vagrant
currently allows each machine to be brought up with only a single
provider at a time. A future version will remove this limitation.
Until then, please destroy the existing machine to up with a new
provider.

Machine name: default
Active provider: virtualbox
Requested provider: VirtualBox

Вы также можете установить поставщика по умолчанию в своем Vagrantfile.

Ответ 2

У меня была такая же проблема, и я исправил ее, обновив Vagrant до последней версии (был 1.7.2, обновлен до 1.8.1).

Ответ 3

Я получил эту работу, но понятия не имею, что такое фактическое решение.

  • Удалите как Vagrant, так и Docker
  • Повторно установите брандмауэр вручную (не через brew/cask)
  • Переустановите Docker из эту ссылку
  • Используйте этот Vagrantfile, чтобы подтвердить, что ваш Vagrant-Docker-VirtualBox прекрасно работает вместе

Ответ 4

Мне не удалось воспроизвести проблему. Тем не менее, я немного прочитал исходный код поставщика Vagrant VirtualBox. Похоже, что он не мог найти VBoxManage в $PATH. Он должен располагаться в /usr/bin/VBoxManage, даже если он установлен через Homebrew. Скорее всего, ваша переменная $PATH была неправильной, или VBoxManage был где-то еще.

Другие читатели, которые имеют такую ​​же проблему, должны:

  • Отметьте /etc/paths, чтобы указать /usr/bin, а также все другие каталоги, обычно найденные в $PATH.
  • Найдите файл с именем ~/.bashrc или ~/.bash_profile. Mac OS X по умолчанию не поставляется ни с одним из этих файлов, но некоторые пользователи добавляют их для настройки bash, а некоторые программы могут пытаться автоматически редактировать/создавать их. Будьте осторожны с любыми строками, которые выглядят как export PATH=.... В OS X изменения в $PATH должны быть сделаны в /etc/paths и /etc/paths.d/*, а не в bash script.
  • Запустите type -a VBoxManage, чтобы увидеть все известные местоположения исполняемых файлов с именем VBoxManage. Там может быть бродячий двоичный код, который имеет приоритет над реальным двоичным кодом.