一尘不染

Docker中的Docker权限错误

docker

我在用于CI的docker设置中有一个docker。本质上,该机器上装有jenkins CI服务器,该服务器使用相同的机器docker套接字为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! ...

这就是我的猜测。我可以从容器中访问主机docker套接字,但似乎无法授予jenkins用户许可。

我已经添加了docker组,也将jenkins用户添加到了docker组。但是我仍然遇到同样的错误。我已经重新开始了几次,所以,我对下一步的工作感到茫然。

有没有办法在特定套接字上强制用户权限?


阅读 306

收藏
2020-06-17

共1个答案

一尘不染

您需要将主机上的docker组的gid映射到jenkins所属容器内的组的gid。这是我的Dockerfile中的示例,说明了如何构建jenkins从属映像:

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

在此示例中,993恰好是主机上docker的主键,您可以对其进行调整以匹配您的环境。


OP的解决方案: 如果无法重建,则可以使用root相应地设置docker组并添加用户。如果您尝试过此操作,则可能必须删除从站(groupdel docker)上的组:

docker exec -it -u root myjenkins bash
container $ groupadd -g 993 docker
container $ usermod -aG docker jenkins
2020-06-17