Jenkins Docker Container无法访问docker.sock

tra*_*off 6 debian jenkins docker docker-compose

我使用docker-compose和这个配置部署了标准的Jenkins Docker镜像:

deployer:
  image: jenkins
  volumes:
    - "/mnt/jenkins:/var/jenkins_home"
    - "/var/run/docker.sock:/var/run/docker.sock"
  ports:
    - "2375:2375"
    - "8080:8080"
    - "50000:50000"
Run Code Online (Sandbox Code Playgroud)

在阅读了大量SO问题之后,我测试了将Root添加到docker用户组gpasswd -a ${USER} docker并验证了Container内的用户是否为Root docker exec jenkins_deployer echo ${USER}.

当我尝试使用"Docker URL = unix:///var/run/docker.sock"在Jenkins UI中添加Docker访问时,我收到错误消息" org.newsclub.net.unix.AFUNIXSocketException:Permission denied(socket: /run/docker.sock) "

如何让Jenkins访问docker.sock以自动部署Docker容器?

Ale*_*net 5

我知道我迟到了两年,但我遇到了同样的问题,并且拥有这个解决方案将节省我几个小时的工作。

\n\n

所以我需要部署一个自动部署 Docker 容器的 Jenkins 容器。以下是我用来构建和运行的文件:

\n\n

Dockerfile

\n\n
FROM jenkins/jenkins:latest\n\nUSER root\nRUN apt-get update -qq \\\n    && apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common\nRUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -\nRUN add-apt-repository \\\n  "deb [arch=amd64] https://download.docker.com/linux/debian \\\n  $(lsb_release -cs) \\\n  stable"\nRUN apt-get update  -qq \\\n    && apt-get install docker-ce=17.12.1~ce-0~debian -y\n\nRUN usermod -aG docker jenkins\n
Run Code Online (Sandbox Code Playgroud)\n\n

docker-compose.yml

\n\n
version: \'3\'\n\nservices:\n  jenkins:\n    container_name: \'jenkins-container\'\n    privileged: true\n    build: .\n    ports:\n      - \'8080:8080\'\n      - \'50000:50000\'\n    volumes:\n      - jenkins-data:/var/jenkins_home\n    restart: unless-stopped\n\nvolumes:\n  jenkins-data:\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,在这些文件所在的文件夹中,运行以下命令:

\n\n
docker-compose up\n
Run Code Online (Sandbox Code Playgroud)\n\n

当容器启动时,使用它来启动内部的 Docker:

\n\n
docker exec -it --user root <CONTAINER_ID>\n\nservice docker start\n
Run Code Online (Sandbox Code Playgroud)\n\n

瞧\xc3\xa0!可能有一些更优化的解决方案,但这现在对我来说非常有用。

\n\n

您现在可以<YOUR_IP>:8080在浏览器中访问,以访问可以运行 Docker 容器的全新 Jenkins。

\n