Docker权限错误中的Docker

Bra*_*sen 13 jenkins docker

我在码头工具设置中有一个码头工具.本质上,该机器上有一个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)