docker安装卷GID不匹配导致错误:拨号unix /var/run/docker.sock:连接:权限被拒绝

使用正式的jenkins图像,我已经安装了docker和docker-compose,并将jenkins添加到docker组(容器中的GID 999)。

之后,我分享了主机的/var/run/docker.sock,让jenkins创build“兄弟”容器。 原来的文件有GID 134,并且这个GID被挂载。 我收到以下错误:

demo_1 | docker:在unix下连接Docker守护进程的时候被拒绝了:///var/run/docker.sock:发布http://%2Fvar%2Frun%2Fdocker.sock/v1.32/containers/create :拨号unix /var/run/docker.sock:连接:权限被拒绝。 demo_1 | 参见“docker运行 – 帮助”。

任何想法如何解决这个问题?

我最小的(还没有优化)Dockerfile是:

FROM jenkins/jenkins:lts USER root RUN apt-get update && apt-get install -y apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common RUN curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | apt-key add - RUN apt-key fingerprint 0EBFCD88 RUN add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ $(lsb_release -cs) \ stable" RUN apt-get update RUN apt-get install -y docker-ce docker-compose RUN usermod -aG docker jenkins USER jenkins RUN newgrp docker 

我也创build了一个docker-compose来testing它:

 version: '2' services: demo: build: . ports: - 8080:8080 - 50000:50000 volumes: - /var/run/docker.sock:/var/run/docker.sock command: > /bin/sh -c " set -e groups docker -v docker-compose -v ls -ln /var/run/docker.sock id jenkins docker run hello-world " 

输出是:

 demo_1 | jenkins staff docker demo_1 | Docker version 17.09.0-ce, build afdb6d4 demo_1 | docker-compose version 1.8.0, build unknown demo_1 | srw-rw---- 1 0 134 0 Sep 30 07:36 /var/run/docker.sock demo_1 | uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins),50(staff),999(docker) demo_1 | docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.32/containers/create: dial unix /var/run/docker.sock: connect: permission denied. demo_1 | See 'docker run --help'. 

我给了这个问题一个肮脏的修复,所以我让这个问题开放,看看是否有更好的问题出现。

由于/var/run/docker.sock文件由拥有相同UID的root拥有,因此我将jenkins添加到sudoers列表中,而无需inputpassword:

 RUN adduser jenkins sudo RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers 

这解决了这个问题。 我不喜欢它,但它的作品。