我在CI的docker设置中有一个docker。本质上,机器上有一个jenkins CI服务器,它使用相同的机器docker套接字为CI创建节点
在我最近更新docker之前,它一直工作得很好。我已经确定了这个问题,但我似乎无法找到正确的方法让它发挥作用
主机$docker exec-it myjenkins bash
[email protected]$docker ps
尝试连接到Docker守护程序时,权限被拒绝
插座unix:///var/run/docker.sock: 获取http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json:dial unix/var/run/docker.sock:connect:权限被拒绝
主机$docker exec-it-u root-it myjenkins bash
[email protected]$docker ps
... docker ps来自主机容器yay。。。
这就是我的猜测。我可以从容器中访问主机docker套接字,但我似乎无法授予jenkins用户权限
我已经添加了docker组,还将jenkins用户添加到docker组。但我还是犯了同样的错误。我已经重新开始了很多次,所以我有点不知所措,不知下一步该怎么办
有没有办法强制用户对特定套接字拥有权限
您需要将主机上docker组的gid映射到容器中jenkins所属组的gid。以下是我的Dockerfile中的一个示例,介绍了我是如何构建詹金斯奴隶形象的:
ARG DOCKER\u GID=993
运行groupadd-g${DOCKER\u GID}DOCKER\
&&;curl-sSLhttps://get.docker.com/ |嘘\
&&;apt-get-q自动记忆\
&&;apt get-q clean-y\
&&;rm-rf/var/lib/apt/lists/*/var/cache/apt/*.bin
运行useradd-m-d/home/jenkins-s/bin/sh-jenkins\
&&;usermod-aG docker jenkins
在本例中,993恰好是主机上docker的gid,您需要调整它以匹配您的环境
来自OP的解决方案:
如果无法重建,您可以在使用root中相应地设置docker组并添加用户。如果在尝试此操作之前,您可能必须删除从属服务器上的组(groupdel docker):
docker exec-it-u root myjenkins bash
容器$groupadd-G993 docker
集装箱$usermod-aG docker jenkins