如何从容器访问docker守护程序与root

时间:2017-03-16 14:08:33

标签: docker jenkins

我试图运行构建docker镜像的Jenkins容器。我上周开始使用docker,我对使用主机卷和用户处理方式感到有些困惑。

我一直在互联网上搜索,我发现了一个git问题,有人发布了一个解决方案,可以从容器中访问docker守护程序。基本上,我们的想法是在Jenkins容器内部堆积包含docker bin文件夹的卷和来自主机的docker.sock,如下所示:

     volumes:
       - /var/run/docker.sock:/var/run/docker.sock
       - /usr/local/bin/docker:/usr/local/bin/docker

我已经完成了这项工作并且只有在我是根的情况下才有效。当我开始学习docker时,我在博客中跟踪了这个例子,而不是直接使用jenkins图像,作者从jenkins图像本身及其依赖项中复制了Dockerfiles以解释该过程。作为该过程的一部分,将创建一个jenkins用户,它是启动容器时使用的用户。我现在的问题是我不能让jenkins用户有权访问docker.sock已挂载,因为它属于root用户,而且docker位于主机中。我尝试在Dockerfile中添加用户docker,但在访问docker.sock时,我仍然从Jenkins作业中收到权限被拒绝错误。如果我检查容器中已挂载的/var/run/docker.sock,我可以看到docker.sock属于群组user而不是docker,因此我不确切地知道什么是'在挂载目录时继续。我还没有在Linux上工作过,所以我的猜测是用户docker在安装目录时不存在,然后使用默认的user但我可能是完全错了。

我还没有得到的另一件事是,如果我创建一个专门用作Jenkins容器的容器而没有别的东西应该在那里运行,那么创建一个特定的{的目的是什么? {1}}用户?我有什么理由不能直接使用用户jenkins吗?

这是我使用的Dockerfile。感谢。

root

1 个答案:

答案 0 :(得分:0)

显然这个问题出现在gid中。出于某种原因,我认为主机中该组的docker gid是50但实际上它实际上是100.当我将其更改为100时,jenkins工作开始起作用。 我仍然不知道为什么docker.sock显示它属于组user而不是容器中的docker。如果我在容器中cat /etc/group,我会看到

root:x:0:
...
users:x:100:
...
jenkins:x:1000:
docker:x:100:jenkins

并在主持人

root:x:0:
lp:x:7:lp
nogroup:x:65534:
staff:x:50:docker
docker:x:100:docker
dockremap:x:101:dockremap