即使 vagrantfile 存在,Vagrant(docker 提供商)也会在 $PATH 中查找本地 docker

即使 vagrantfile 存在,Vagrant(docker 提供商)也会在 $PATH 中查找本地 docker

我正在使用带有 3.2 内核的 Linux 桌面(Ubuntu 12.04),并且想要使用 vagrants docker provider/provisioning 进行测试。

所以我在根目录中创建了一个 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 '{print $2}' | xargs kill"
end

(实际上这些文件来自博客文章

问题是当我做

 $ vagrant up --provider=docker

我收到以下错误:

使用“docker”提供商启动机器“app”...在 PATH 变量中未找到 Vagrant 尝试运行的可执行文件“docker”。这是一个错误。请验证此软件是否已安装并位于路径上。

我宁愿期望它会使用 ./docker/Vagrantfile 启动一个 virtualbox 实例,即为 docker 配置的 precise64 映像,并且不需要本地安装 docker(这是不可能的,因为我使用的是 3.2)?

如果有人能重现此问题或发现明显的错误,我将非常感激您的评论或回答。谢谢!

已编辑:上面的示例比检查问题所需的要复杂一些。我根本无法使用 docker 提供程序,所以我怀疑是 vagrant 错误,除非这里明显有问题。

使用此 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.

答案1

由于您在 Linux 上使用 Vagrant,因此默认不使用“代理 VM”,因为 Vagrant 假定 docker 直接安装到您的主机上。

无论如何你都可以强制它:

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

代理 VM(可选)d.vagrant_vagrantfile需要安装 docker。当然,您可以使用配置程序安装它(在您的例子中,在 ./docker/Vagrantfile 中)。在大多数情况下,默认的 boot2docker 框应该足够了。

最新 Vagrant 版本的最新 docker 提供程序文档可在此处找到:https://docs.vagrantup.com/v2/docker/

相关内容