Question Vagrant (fournisseur de docker) recherche le docker local dans $ PATH même si le fichier vaguel est présent


J'utilise un bureau Linux avec un noyau 3.2 (Ubuntu 12.04) et je voudrais tester en utilisant le fournisseur / provisioning de vagrants docker.

Donc, je fais un fichier Vagrant dans 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

Le conteneur vagrantfile (./docker/Vagrantfile) ressemble à ceci:

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

(En fait, ces fichiers proviennent de le post du blog)

Le problème est quand je fais un

 $ vagrant up --provider=docker

Je reçois l'erreur suivante:

Amener la machine 'app' avec le fournisseur 'docker' ... L'exécutable   'Docker' Vagrant tente de s'exécuter n'a pas été trouvé dans la variable PATH.   Ceci est une erreur. Veuillez vérifier que ce logiciel est installé et sur le   chemin.

Je m'attendais plutôt à ce qu'il lance une instance de virtualbox avec ./docker/Vagrantfile, l'image précise64 fournie pour docker, et qu'il ne serait pas nécessaire d'avoir un menu fixe installé localement (ce qui n'est pas possible parce que je suis sur 3.2) ?

Si quelqu'un peut reproduire ceci ou repérer une erreur évidente, j'apprécierais un commentaire ou une réponse. Je vous remercie!

Édité: L'exemple ci-dessus est un peu plus compliqué que nécessaire pour vérifier le problème. Je ne peux pas vraiment utiliser le fournisseur de docker du tout, donc je soupçonne un bug vagabond à moins qu'il y ait quelque chose de faux ici.

Une manière plus simple de reproduire en utilisant ce fichier Vagrant:

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

Quand j'essaie de l'utiliser:

$ 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
2018-06-13 11:41


origine




Réponses:


Comme vous utilisez Vagrant sous Linux, le "proxy VM" n'est pas utilisé par défaut, car Vagrant suppose que Docker est installé directement sur votre ordinateur hôte.

Vous pouvez quand même le forcer:

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

La machine virtuelle proxy, que vous spécifiez éventuellement avec d.vagrant_vagrantfile, doit avoir docker installé. Bien sûr, vous pouvez l’installer avec un provisioner (dans ./docker/Vagrantfile dans votre cas). Dans la plupart des cas, la boîte par défaut boot2docker devrait suffire.

La documentation à jour du fournisseur de docker pour la dernière version de Vagrant est disponible ici: https://docs.vagrantup.com/v2/docker/


3
2018-06-13 12:59



Bonjour, merci d'avoir répondu, mais ce n'est pas pertinent pour ma question. Mon problème est qu'il n'essaie pas de faire tourner une machine du tout. Il se plaint que je manque de docker sur la machine locale. Je pense que cela pourrait être un bug dans vagabond. - grm
Ah, euh. Votre problème est que Vagrant n'utilisera pas la machine virtuelle proxy par défaut sous Linux, car vous pouvez simplement y installer et exécuter directement Docker. J'ai édité la réponse en conséquence. - tmatilai