首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建包含Docker和Jenkins的Kubernetes部署

创建包含Docker和Jenkins的Kubernetes部署
EN

Stack Overflow用户
提问于 2021-04-08 20:29:07
回答 1查看 497关注 0票数 1

我正在尝试创建一个Kubernetes部署,它允许在同一个主机上构建Docker映像和Jenkins。下面是我对jenkins-docker-in-docker部署中的Docker和Jenkins容器中包含Docker的部署的YAML配置:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-docker-in-docker
spec:
  selector:
    matchLabels:
      app: jenkins-docker-in-docker
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins-docker-in-docker
    spec:
      containers:
        - name: dind-daemon
          image: docker:18.01.0-dind
          resources:
            requests:
              cpu: 20m
              memory: 512Mi
          securityContext:
            privileged: true
          volumeMounts:
            - name: docker-graph-storage
              mountPath: /var/lib/docker
        - name: docker-cmds
          image: docker:18.01.0
          command: ['docker', 'run', '-p', '80:80', 'httpd:latest']
          resources:
            requests:
              cpu: 10m
              memory: 256Mi
          env:
            - name: DOCKER_HOST
              value: tcp://localhost:2375
        - name: ml-services
          image: trion/jenkins-docker-client
          ports:
            - containerPort: 8080

使用从https://www.jenkins.io/doc/tutorials/build-a-java-app-with-maven/复制的简单管道:

代码语言:javascript
复制
pipeline {
    agent {
        docker {
            image 'maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
    }
}

当我试图构建时,我会收到以下错误:

代码语言:javascript
复制
First time build. Skipping changelog.
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] isUnix
[Pipeline] sh
+ docker inspect -f . maven:3-alpine

    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    [Pipeline] isUnix
    [Pipeline] sh
    + docker pull maven:3-alpine
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    [Pipeline] }
    [Pipeline] // withEnv
    [Pipeline] }
    [Pipeline] // node
    [Pipeline] End of Pipeline
    ERROR: script returned exit code 1
    Finished: FAILURE

我现在似乎不正确的理解是,容器dind-daemondocker-cmdsml-services容器存在于同一个部署中,在本例中称为jenkins-docker-in-docker。因此,Docker和Jenkins应该可以在jenkins-docker-in-docker上使用

我是否配置了Kubernetes文件不正确?

更新:

我修改了yaml以设置DOCKER_HOST环境变量:

代码语言:javascript
复制
- name: ml-services
  env:
    - name: DOCKER_HOST
      value: "dind-daemon:2375"
  image: trion/jenkins-docker-client
  ports:
    - containerPort: 8080

关于Jenkins的错误现在是:

  • 码头检查-f。maven:3-alpine

在连接过程中出错:获取http://dind-daemon:2375/v1.40/containers/maven:3-alpine/json:拨号tcp:查找isUnix上的10.245.0.10:53:没有这样的主机管道isUnix管道sh

  • 码头拉出maven:3-连接过程中的高寒错误: Post http://dind-daemon:2375/v1.40/images/create?fromImage=maven&tag=3-alpine:拨号tcp:查找dind-daemon on 10.245.0.10:53:没有这样的主机管道}管道// withEnv管道}管道//节点管道管道末端管道错误:脚本返回退出代码1完成:失败

我是否需要在10.245.20.10:53上公开坞守护进程?

更新2:

在接受答案的帮助下,我使用以下部署完成了这项工作:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-docker-in-docker1.1
spec:
  selector:
    matchLabels:
      app: jenkins-docker-in-docker1.1
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins-docker-in-docker1.1
    spec:
      containers:
        - name: dind-daemon
          image: docker:18.01.0-dind
          resources:
            requests:
              cpu: 20m
              memory: 512Mi
          securityContext:
            privileged: true
          volumeMounts:
            - name: docker-graph-storage
              mountPath: /var/lib/docker
            - name: jenkins-home
              mountPath: /var/jenkins_home
        - name: docker-cmds
          image: docker:18.01.0
          command: ['docker', 'run', '-p', '80:80', 'httpd:latest']
          resources:
            requests:
              cpu: 10m
              memory: 256Mi
          env:
            - name: DOCKER_HOST
              value: tcp://localhost:2375
        - name: ml-services
          env:
            - name: DOCKER_HOST
              value: tcp://localhost:2375
          image: trion/jenkins-docker-client
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: jenkins-home
              mountPath: /var/jenkins_home

      volumes:
        - name: docker-graph-storage
          emptyDir: {}
        - name: jenkins-home
          emptyDir: {}

我可能已经在上面的.yaml配置中包含了一些冗余配置,它使用Jenkins执行一个Docker in Docker容器,并成功地执行以下的Jenkinsfile

代码语言:javascript
复制
pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-08 22:22:17

Docker尝试使用unix套接字连接到守护进程。当没有设置DOCKER_HOST环境变量时,就会发生这种情况。

使用正确的主机和端口连接到您的停靠守护进程。在您的设置中,它将是“daemon”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67011438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档