【问题标题】:Vagrant and docker providerVagrant 和 docker 提供者
【发布时间】:2016-01-08 12:21:15
【问题描述】:

这个问题也已发布到 Vagrant Google Group。

我的环境:

OS-X 10.9.4
VirtualBox 5.012 r104815
Vagrant 1.7.4

尝试使用docker provider,宿主机为geerlingguy/centos7

通过放置:

config.vm.provision "docker"

在主机 vagrant 文件中,它使用以下 docker 版本自动配置我的主机:

Version:      1.8.2-el7.centos
API version:  1.20
Package Version: docker-1.8.2-10.el7.centos.x86_64
Go version:   go1.4.2
Git commit:   a01dc02/1.8.2
Built:
OS/Arch:      linux/amd64

Server:
Version:      1.8.2-el7.centos
API version:  1.20
Package Version:
Go version:   go1.4.2
Git commit:   a01dc02/1.8.2
Built:
OS/Arch:      linux/amd64

我可以从集线器运行 docker 容器,但是当我尝试从 Dockerfile 构建 docker 容器时,我得到:

Command: "docker" "build" "/var/lib/docker/docker_build_1b35c3f0278e1a3b37d1578d7ce326e5"

Stderr:

Stdout: unable to prepare context: unable to evaluate symlinks in context path: lstat /var/lib/docker/docker_build_1b35c3f0278e1a3b37d1578d7ce326e5: permission denied

如果我 vagrant ssh 进入 centos7 主机并运行

docker build /var/lib/docker/docker_build_1b35c3f0278e1a3b37d1578d7ce326e5 

我看到同样的错误,但如果我运行

sudo docker build /var/lib/docker/docker_build_1b35c3f0278e1a3b37d1578d7ce326e5 

构建运行。

我试过了:

config.ssh.username = 'root'
config.ssh.password = 'vagrant'
config.ssh.insert_key = 'true'

对于主机,但它没有找到 docker 命令。

也许我应该在主机 vagrantfile 中添加我正在执行此操作:

 # Ensure vagrant user can run docker command
  config.vm.provision "shell", inline: "sudo groupadd docker;true"
  config.vm.provision "shell", inline: "sudo usermod -a -G docker vagrant;true"
  config.vm.provision "shell", inline: "docker version"
  config.vm.provision :reload

vagrant 可以运行 docker。

这是它失败的地方(在 docker vagrant 文件中):

 config.vm.provider "docker" do |docker|
     docker.build_dir = /path/to/my/dockerfile/on/the/host/vm (FAILS WITH symlink ERROR)
  end

但是

config.vm.provider "docker" do |docker|
    docker.image = hub/image
end

将成功创建容器。

这两天我一直在努力——阅读各种有关 virtualbox 中符号链接问题的信息,并尝试了各种不同的设置。

谁能告诉我应该如何解决这个问题。

谢谢。

【问题讨论】:

  • 您在设置“确保 vagrant 用户可以运行 docker 命令”配置后重新配置 VM 对吗?
  • 好的,所以在放入这些行之前,docker vagrantfile 会因某些 docker 命令而崩溃。我将最后一个“重新加载”行放入(使用重新加载插件),然后似乎 vagrant 可以运行 docker 命令 - 实际上它可以从 docker hub 旋转容器,只是由于符号链接错误而无法构建,似乎只有 sudo 可以构建跨度>
  • 我强烈认为这是由于流浪用户需要 root 权限才能运行 docker。你create the docker group, and add the vagrant user to it了吗?
  • 我认为我在# Ensure vagrant user can run docker command 中这样做很明显?我认为它本身不是运行命令的问题,但问题与文件夹权限和以下符号链接有关。
  • 我相信这是问题所在:github.com/docker/docker/issues/15037 看起来我的主机上需要一个新的 docker。我怎样才能完全在 Vagrantfile 中编写脚本?

标签: docker vagrant virtualbox


【解决方案1】:

修复“流浪”用户

您可能需要通过few steps 来提升 docker 的权限。否则,您可以尝试运行$ sudo docker 而不仅仅是$ docker

或修复“root”用户:

如果你想改用root,听起来docker可能不在root用户的路径中。

vagrant ssh 进入机器并验证 root 和 vagrant 用户的路径:

$ echo $PATH

然后,add 缺少指向您的 root 用户的 $PATH 的 docker 路径。

【讨论】:

  • 如果您不知道,您可以answer your own question 并标记为正确答案。这样,这个问题就不会“悬而未决”。除非,您正在等待其他人出现并提供意见:)
  • 完成,感谢您的提示、您的时间和您的意见。
【解决方案2】:

我的解决方案是在 /usr/bin/docker 上设置粘性位。

这允许 docker 遵循符号链接并完成 docker 构建。晦涩难懂,也不完全确定故障在哪里。我基本上是按照推荐的工作流程来使用 vagrant 构建 docker 容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2015-10-02
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    相关资源
    最近更新 更多