Docker中的Docker权限错误

我有一个泊坞窗设置为CI。 本质上,机器上有一个jenkins CI服务器,它使用相同的机器docker socket为CI创build节点。

这很好,直到我最近更新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组中。 但我仍然得到同样的错误。 我已经重新开始了一段时间,所以我有点不知所措。

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

您需要将主机上的泊坞窗组的gid映射到jenkins所属组的gid。 下面是我的Dockerfile中关于如何构buildjenkins从图片的示例:

 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的gid,你可以调整它来匹配你的环境。


来自OP的解决scheme:如果重build不可能,您可以使用root相应地设置泊坞窗组并添加用户。 如果您尝试过,则可能需要删除从站( groupdel docker )上的组:

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

用root用户执行命令,在开始时包含sudo。

就我个人而言,我只需要这样做:

 sudo gpasswd -a $USER docker 

它解决了