我在码头工具设置中有一个码头工具.本质上,该机器上有一个jenkins CI服务器,它使用相同的机器docker socket为CI创建节点.
在我最近更新了docker之前,这很有效.我已经确定了这个问题,但我似乎无法找到合适的魔法让它发挥作用.
host $ docker exec -it myjenkins bash
jenkins@container $ docker ps
Got permission denied while trying to connect to the Docker daemon
socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json: dial unix /var/run/docker.sock: connect: permission denied
host $ docker exec -it -u root -it myjenkins bash
root@container $ docker ps
... docker ps from host container yay! ...
Run Code Online (Sandbox Code Playgroud)
所以这就是我所猜测的.我可以从容器内访问主机docker socket,但我似乎无法授予jenkins用户权限.
我添加了docker组,并将jenkins用户添加到docker组.但我仍然得到同样的错误.我已经重新开始了一段时间,所以,我有点不知道接下来要做什么.
有没有办法强制特定套接字上的用户权限?
BMi*_*tch 17
您需要将主机上的docker组的gid映射到jenkins所属的组的gid.这是我的Docker文件中我如何构建jenkins slave图像的示例:
ARG DOCKER_GID=993
RUN groupadd -g ${DOCKER_GID} docker \
&& curl -sSL https://get.docker.com/ | sh \
&& apt-get -q autoremove \
&& apt-get -q clean -y \
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/*.bin
RUN useradd -m -d /home/jenkins -s /bin/sh jenkins \
&& usermod -aG docker jenkins
Run Code Online (Sandbox Code Playgroud)
在这个例子中,993恰好是主机上的docker的gid,你可以调整它以匹配你的环境.
来自OP的解决方案:
如果无法进行重建,则可以使用root设置docker组并添加用户.如果您在尝试此操作之前可能必须删除slave(groupdel docker)上的组:
docker exec -it -u root myjenkins bash
container $ groupadd -g 993 docker
container $ usermod -aG docker jenkins
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8616 次 |
| 最近记录: |