【问题标题】:Jenkins Docker Container can't access docker.sockJenkins Docker 容器无法访问 docker.sock
【发布时间】:2017-06-12 01:04:33
【问题描述】:

我使用 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"

在阅读了许多 SO 问题后,我测试了使用 gpasswd -a ${USER} docker 将 Root 添加到 docker 用户组,并验证了容器内的用户是使用 docker exec jenkins_deployer echo ${USER} 的 Root。

当我尝试使用“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 容器?

【问题讨论】:

  • 您的容器内是否安装了 docker?此外,您需要将 docker 套接字从您的主机系统共享/安装到您的 Jenkins 容器中。就我个人而言,我不喜欢 docker-in-docker 方法,因为它们感觉很 hacky……我更喜欢将我的 jenkins 主容器连接到安装了 docker 的从站,然后将所有 docker 任务委托给该从站。
  • 我从内部的 Web GUI 安装了 Docker 插件,因此它应该具有与 Docker 套接字交互的所有依赖项(我猜?)您如何将 docker 任务委托给从站?我想在运行 Jenkins 容器的主机系统中部署一个新容器,因此必须在某处建立主机 Docker API 和触发部署的容器之间的连接。
  • 对不起我的错误。没错,您已经安装了 docker 套接字并在容器内安装了 docker。我的从属用例更针对容器构建。也许权限错误与某些SELinux restrictions有关?
  • 你有没有让它运行@trahloff?
  • @MaxSchindler 很遗憾没有

标签: jenkins docker debian docker-compose


【解决方案1】:

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

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

Dockerfile

FROM jenkins/jenkins:latest

USER root
RUN apt-get update -qq \
    && apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
  "deb [arch=amd64] https://download.docker.com/linux/debian \
  $(lsb_release -cs) \
  stable"
RUN apt-get update  -qq \
    && apt-get install docker-ce=17.12.1~ce-0~debian -y

RUN usermod -aG docker jenkins

docker-compose.yml

version: '3'

services:
  jenkins:
    container_name: 'jenkins-container'
    privileged: true
    build: .
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - jenkins-data:/var/jenkins_home
    restart: unless-stopped

volumes:
  jenkins-data:

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

docker-compose up

当容器启动时,使用它在里面启动 Docker:

docker exec -it --user root <CONTAINER_ID>

service docker start

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

您现在可以在浏览器中访问 &lt;YOUR_IP&gt;:8080 以访问可以运行 Docker 容器的全新 Jenkins。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-18
    • 2018-08-09
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多