首页 > 解决方案 > 如何从本地 Kubernetes 实例上运行的 jenkins 映像访问 docker

问题描述

我在我的 Macintosh 计算机上运行 Kubernetes,我正在尝试运行一个 Jenkins 映像,该映像能够连接到内部 docker 系统,然后启动更多 docker 映像以便能够在它们上运行作业。到目前为止,我还没有让它工作,我希望有人能提供帮助。

我正在运行的 docker 版本是:

  1. Docker 桌面 2.0.0.0-mac81 (29211) 稳定版
  2. 引擎 10.09.0
  3. Kubernetes v1.10.3

    • 我从从 tar 文件安装 docker 到实际使用 apt-get
    • 我还尝试将 Jenkins 用户添加到通过 apt-get 安装 docker 时创建的 docker 组

我的 Docker 文件

FROM jenkins/jenkins:lts

USER root

RUN apt-get update \
    && apt-get install -y \
    maven \
    vim \
    libunwind8 \
    gettext \
    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 -y

USER jenkins

和我的 deployment.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
  namespace: deployment-tools
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
        - name: jenkins
          image: my/jenkins
          imagePullPolicy: Never
          env:
            - name: JAVA_OPTS
              value: -Djenkins.install.runSetupWizard=false
          ports:
            - name: http-port
              containerPort: 8080
            - name: jnlp-port
              containerPort: 50000
          volumeMounts:
            - name: jenkins-home
              mountPath: /var/jenkins_home
            - name: docker-socket
              mountPath: /var/run/docker.sock
      securityContext:
      # Specify fsGroup for pod, so that the persistent volume is writable for the non-privileged uid/gid 1000
        runAsUser: 1000
        fsGroup: 1000
      volumes:
        - name: jenkins-home
          hostPath:
            path: /Users/myUser/links/code/jenkins/filesystem
            type: Directory
        - name: docker-socket
          hostPath:
            path: /var/run/docker.sock
            type: File

我目前正在尝试通过挂载我的本地文件系统 docker 套接字来访问子系统,但它给了我这个错误:

myUser@mymac jenkins (master) $ kubectl exec -it jenkins-78689b8786-rjqf6 --namespace=deployment-tools -- /bin/bash
jenkins@jenkins-78689b8786-rjqf6:/$ docker images list
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.39/images/json?filters=%7B%22reference%22%3A%7B%22list%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied

而且我希望它不会抛出错误并返回我已安装在计算机上的 docker 映像列表。

标签: dockerjenkinskubernetes

解决方案


推荐阅读