我试图运行构建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
答案 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