Vagrant和docker提供者

时间:2016-01-08 12:21:15

标签: docker vagrant virtualbox

此问题也已发布到Vagrant Google Group。

我的环境:

OS-X 10.9.4
VirtualBox 5.012 r104815
Vagrant 1.7.4

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

放置:

config.vm.provision "docker"

在主机vagvern文件中,它使用以下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

如果我将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命令。

也许我应该添加我在host 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

将成功创建一个容器。

我一直在敲我的头2天 - 阅读关于virtualbox中的符号链接问题的所有种类并尝试了各种不同的设置。

有人可以告诉我应该如何解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:0)

修复“流浪”用户

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

或修复“root”用户:

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

vagrant ssh进入机器并验证root&的路径流浪者用户:

$ echo $PATH

然后,add您的root用户的$PATH缺少泊坞路径。

答案 1 :(得分:0)

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

这允许docker跟踪sym链接并完成docker build。模糊不清,并不完全确定故障所在。我基本上遵循了建议使用vagrant的docker容器的工作流程。