Vagrant (поставщик докеров) ищет локальный докер в $ PATH, даже если присутствует vagrantfile

2902
grm

Я использую рабочий стол linux с ядром 3.2 (Ubuntu 12.04) и хотел бы протестировать его с помощью провайдера / инициализации vagrants docker.

Поэтому я делаю Vagrantfile в корне:

VAGRANTFILE_API_VERSION = "2"  Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "app" do |v| v.vm.provider "docker" do |d| d.cmd = ["/sbin/my_init", "--enable-insecure-key"] d.image = "phusion/baseimage" d.has_ssh = true d.vagrant_vagrantfile = "./docker/Vagrantfile" end  v.ssh.username = "root" v.ssh.private_key_path = "phusion.key" end end 

Контейнеры vagrantfile (./docker/Vagrantfile) выглядят так:

VAGRANTFILE_API_VERSION = "2"  Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "precise64" config.vm.provision "docker" config.vm.provision "shell", inline: "ps aux |grep 'sshd:' | awk '' | xargs kill" end 

(на самом деле эти файлы из поста в блоге )

Беда в том, когда я делаю

 $ vagrant up --provider=docker 

Я получаю следующую ошибку:

Подключение компьютера app к провайдеру docker ... Исполняемый файл docker, который пытается запустить Vagrant, не найден в переменной PATH. Это ошибка Пожалуйста, убедитесь, что это программное обеспечение установлено и находится в пути.

Я скорее ожидал, что он запустит экземпляр virtualbox с ./docker/Vagrantfile, образом Precision64, предоставленным для Docker, и что не будет необходимости иметь локально установленный Docker (что невозможно, потому что я на 3.2) ?

Если кто-то может воспроизвести это или заметить очевидную ошибку, я был бы признателен за комментарий или ответ. Спасибо!

Отредактировано : приведенный выше пример немного сложнее, чем нужно, чтобы проверить проблему. Я вообще не могу использовать провайдера докеров, поэтому я подозреваю бродячую ошибку, если здесь явно не что-то не так.

Более простой способ воспроизвести с помощью этого Vagrantfile:

VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "app" do |v| v.vm.provider "docker" do |d| d.cmd = ["/sbin/my_init", "--enable-insecure-key"] d.image = "phusion/baseimage" d.has_ssh = true end  v.ssh.username = "root" v.ssh.private_key_path = "phusion.key" end end 

Когда я пытаюсь использовать это:

$ uname -a Linux ubuntu1204 3.2.0-64-generic #97-Ubuntu SMP Wed Jun 4 22:04:21 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux $ vagrant up --provider=docker Bringing machine 'app' up with 'docker' provider... The executable 'docker' Vagrant is trying to run was not found in the PATH variable. This is an error. Please verify this software is installed and on the path. 
2

1 ответ на вопрос

3
tmatilai

As you are using Vagrant on Linux, the "proxy VM" is not used by default, as Vagrant assumes that docker is installed directly to your host machine.

You can anyway force it:

Vagrant.configure("2") do |config| config.vm.provider "docker" do |d| d.force_host_vm = true # ... end end 

The proxy VM, which you optionally specify with d.vagrant_vagrantfile, needs to have docker installed. Of course you can install it with a provisioner (in ./docker/Vagrantfile in your case). In most cases the default boot2docker box should be enough though.

The up-to-date docker provider documentation for the latest Vagrant version can be found here: https://docs.vagrantup.com/v2/docker/

Привет, спасибо за ответ, но это не относится к моему вопросу. Моя проблема в том, что он вообще не пытается раскрутить машину. Просто жалуется, что мне не хватает докера на локальной машине. Я думаю, что это может быть ошибка в бродяге. grm 10 лет назад 0
Ах, понял. Ваша проблема в том, что Vagrant не будет использовать прокси-виртуальную машину по умолчанию в Linux, так как вы можете просто установить и запустить Docker прямо в ней. Я отредактировал ответ соответственно. tmatilai 10 лет назад 0

Похожие вопросы