O Vagrant (provedor de encaixe) procura pela janela de encaixe local no $ PATH, mesmo que o vagrantfile esteja presente

2

Estou usando um desktop Linux com um kernel 3.2 (Ubuntu 12.04) e gostaria de testar usando vagrants docker provider / provisioning.

Então eu faço um Vagrantfile na raiz:

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

Os contêineres vagrantfile (./docker/Vagrantfile) são assim:

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 '{print $2}' | xargs kill"
end

(na verdade, esses arquivos são da postagem no blog )

O problema é quando faço uma

 $ vagrant up --provider=docker

Eu recebo o seguinte erro:

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.

Eu esperava que fosse lançada uma instância de virtualbox com ./docker/Vagrantfile, a imagem precisa de 64 fornecida para o docker, e que não seria necessário ter uma janela de encaixe instalada localmente (o que não é possível porque estou em 3.2)?

Se alguém puder reproduzir isso ou detectar um erro óbvio, eu apreciaria um comentário ou uma resposta. Obrigada!

Editado : o exemplo acima é um pouco mais complicado do que o necessário para verificar o problema. Eu realmente não posso usar o provedor docker, então eu suspeito de um bug errante, a menos que haja algo obviamente errado aqui.

Uma maneira mais simples de se reproduzir usando este 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

Quando tento usá-lo:

$ 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.
    
por grm 13.06.2014 / 13:41

1 resposta

3

Como você está usando o Vagrant no Linux, o "proxy VM" não é usado por padrão, já que o Vagrant assume que o docker está instalado diretamente em sua máquina host.

Você pode, de qualquer maneira, forçar:

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

A VM do proxy, que você especifica opcionalmente com d.vagrant_vagrantfile , precisa ter a janela de encaixe instalada. Claro que você pode instalá-lo com um provisionador (em ./docker/Vagrantfile no seu caso). Na maioria dos casos, a caixa boot2docker padrão deve ser suficiente.

A documentação atualizada do provedor de encaixe para a versão mais recente do Vagrant pode ser encontrada aqui: link

    
por 13.06.2014 / 14:59