Vagrant (Docker-Provider) sucht in $ PATH nach lokalem Docker, auch wenn Vagrantfile vorhanden ist

2991
grm

Ich verwende einen Linux-Desktop mit einem 3.2-Kernel (Ubuntu 12.04) und würde gerne mit Vagrants Docker Provider / Provisioning testen.

Also mache ich eine Vagrantfile in root:

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 

Die Container-Vagrantfile (./docker/Vagrantfile) sieht folgendermaßen aus:

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 

(eigentlich sind diese Dateien aus dem Blogpost )

Das Problem ist, wenn ich eine

 $ vagrant up --provider=docker 

Ich erhalte folgende Fehlermeldung:

Die 'app' des Rechners wird mit dem 'Docker'-Provider hochgefahren ... Die ausführbare' Docker'-Instanz, die Vagrant ausführen möchte, wurde nicht in der PATH-Variablen gefunden. Das ist ein Fehler. Bitte vergewissern Sie sich, dass diese Software installiert ist und sich im Pfad befindet.

Ich habe eher erwartet, dass es eine Virtualbox-Instanz mit ./docker/Vagrantfile starten würde, das genaue Docking-Image, das für Docker bereitgestellt wird, und dass kein lokal installiertes Docker erforderlich wäre (was nicht möglich ist, da ich auf 3.2 bin). ?

Wenn jemand dies reproduzieren oder einen offensichtlichen Fehler erkennen kann, würde ich mich über einen Kommentar oder eine Antwort freuen. Vielen Dank!

Bearbeitet : Das obige Beispiel ist etwas komplizierter als zum Überprüfen des Problems erforderlich. Ich kann den Docker-Provider nicht wirklich verwenden, daher vermute ich einen Landstreicher-Fehler, es sei denn, hier ist etwas offensichtlich nicht in Ordnung.

Eine einfachere Art, mit dieser Vagrantdatei zu reproduzieren:

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 

Wenn ich versuche, es zu benutzen:

$ 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 Antwort auf die Frage

3
tmatilai

Da Sie Vagrant unter Linux verwenden, wird die "Proxy-VM" nicht standardmäßig verwendet, da Vagrant davon ausgeht, dass das Docker direkt auf Ihrem Host-Computer installiert ist.

Sie können es trotzdem erzwingen:

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

Für die Proxy-VM, die Sie optional angeben d.vagrant_vagrantfile, muss Docker installiert sein. Natürlich können Sie es mit einem Provisioner installieren (in Ihrem Fall in ./docker/Vagrantfile). In den meisten Fällen sollte jedoch die Standardbox boot2docker ausreichen.

Die aktuelle Docker-Provider-Dokumentation für die neueste Vagrant-Version finden Sie hier: https://docs.vagrantup.com/v2/docker/

Hallo, danke für die Beantwortung, aber das ist für meine Frage nicht relevant. Mein Problem ist, dass es nicht versucht, überhaupt eine Maschine hochzufahren. Es beschwert sich nur, dass mir Docker auf der lokalen Maschine fehlt. Ich denke, es könnte ein Fehler in einem Landstreicher sein. grm vor 10 Jahren 0
Ah, hast du. Ihr Problem ist, dass Vagrant die Proxy-VM unter Linux standardmäßig nicht verwendet, da Sie Docker einfach direkt installieren und ausführen können. Ich habe die Antwort entsprechend bearbeitet. tmatilai vor 10 Jahren 0