Vagrant 和 docker 供应商
Vagrant and docker provider
此问题也已发布到 Vagrant Google 组。
我的环境:
OS-X 10.9.4
VirtualBox 5.012 r104815
Vagrant 1.7.4
正在尝试使用 docker 提供程序,主机为 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
我可以从 hub 运行 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
版本 运行s.
我试过:
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 流浪者文件中):
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 中的符号链接问题并尝试了各种不同的设置。
任何人都可以告诉我应该如何解决这个问题。
谢谢。
修复 "vagrant" 用户:
您可能需要通过 few steps 来提升 docker 的权限。否则,您可以尝试 运行 $ sudo docker
而不是 $ docker
.
或修复"root"用户:
如果您想改用 root,听起来 docker 可能不在 root 用户的路径中。
vagrant ssh
进入机器并验证 root 和 vagrant 用户的路径:
$ echo $PATH
然后,add 丢失的 docker 根用户 $PATH
路径。
我的解决方案是在 /usr/bin/docker 上设置粘滞位。
这允许 docker 跟随符号链接并完成 docker 构建。晦涩难懂,也不能完全确定故障出在哪里。我基本上遵循了使用 vagrant 构建 docker 容器的推荐工作流程。
此问题也已发布到 Vagrant Google 组。
我的环境:
OS-X 10.9.4
VirtualBox 5.012 r104815
Vagrant 1.7.4
正在尝试使用 docker 提供程序,主机为 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
我可以从 hub 运行 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
版本 运行s.
我试过:
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 流浪者文件中):
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 中的符号链接问题并尝试了各种不同的设置。
任何人都可以告诉我应该如何解决这个问题。
谢谢。
修复 "vagrant" 用户:
您可能需要通过 few steps 来提升 docker 的权限。否则,您可以尝试 运行 $ sudo docker
而不是 $ docker
.
或修复"root"用户:
如果您想改用 root,听起来 docker 可能不在 root 用户的路径中。
vagrant ssh
进入机器并验证 root 和 vagrant 用户的路径:
$ echo $PATH
然后,add 丢失的 docker 根用户 $PATH
路径。
我的解决方案是在 /usr/bin/docker 上设置粘滞位。
这允许 docker 跟随符号链接并完成 docker 构建。晦涩难懂,也不能完全确定故障出在哪里。我基本上遵循了使用 vagrant 构建 docker 容器的推荐工作流程。