当前位置: 首页 > 知识库问答 >
问题:

Docker装入的卷GID不匹配导致错误:拨号unix/var/run/Docker。sock:连接:权限被拒绝

麹学文
2023-03-14

使用jenkins官方图片,我安装了docker和docker compose,并将jenkins添加到docker组(容器中的GID 999)。

之后,我共享了主机的 /var/run/docker.sock,以便启用jenkins创建“兄弟姐妹”容器。碰巧原始文件具有GID 134,并且安装了此GID。我收到以下错误:

demo_1|docker:在unix://var/run/docker.sock尝试连接到Docker守护程序套接字时权限被拒绝:Post超文本传输协议:///var/run/docker.sock/v1.32/containers/create:拨号unix /var/run/docker.sock: connect:权限被拒绝。demo_1|请参阅'docker run--help'。

知道怎么解决这个问题吗?

我最小的(尚未优化的)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

我还创建了一个docker compose来测试它:

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'.

共有2个答案

邵弘致
2023-03-14

您可以在dockerfile中创建与docker具有相同组id的组https://stackoverflow.com/a/71085404/4791684

曹经业
2023-03-14

我给了这个问题一个肮脏的修正,所以我把这个问题放在一边,看看是否会出现更好的问题。

由于 /var/run/docker.sock文件归root所有,具有相同的UID,我将jenkins添加到sudoers列表中,无需输入密码:

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

这就解决了问题。我不喜欢它,但它很管用。

 类似资料: