首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让docker在Jenkins节点上运行?

如何让docker在Jenkins节点上运行?
EN

Stack Overflow用户
提问于 2021-06-05 05:00:31
回答 1查看 259关注 0票数 0

我正在尝试让docker在Jenkins上运行,Jenkins本身就是一个容器。下面是Pod规范的一部分。

cyrilpanicker/jenkins是一个安装了Jenkins和docker-cli的镜像。对于Docker守护进程,我正在运行另一个带有docker:dind镜像的容器(节点运行在k8s集群上)。为了在它们之间连接docker.sock,我使用了卷挂载。

代码语言:javascript
复制
spec:
  containers:
    - name: jenkins
      image: cyrilpanicker/jenkins
      volumeMounts:
        - mountPath: /var/run/docker.sock
          name: docker-socket
    - name: docker
      image: docker:dind
      securityContext:
        privileged: true
      volumeMounts:
        - mountPath: /var/run/docker.sock
          name: docker-socket
  volumes:
    - name: docker-socket
      hostPath:
        path: /docker.sock
        type: FileOrCreate

但这是行不通的。下面是来自docker容器的日志。

代码语言:javascript
复制
time="2021-06-04T20:47:26.059792967Z" level=info msg="Starting up"
time="2021-06-04T20:47:26.061956820Z" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
failed to load listeners: can't create unix socket /var/run/docker.sock: device or resource busy

有没有人能提出另一种方法来解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-05 22:56:00

根据kubernetes文档,hostPath从节点文件系统挂载路径,所以如果我理解正确的话,这不是您想要实现的目标。恐怕不可能将单个文件作为卷挂载,所以即使您从volumes中移除hostPathdocker.sock也会挂载为目录:

代码语言:javascript
复制
jenkins@static-web:/$ ls -la /var/run/
total 20
drwxr-xr-x 1 root root 4096 Jun  5 14:44 .
drwxr-xr-x 1 root root 4096 Jun  5 14:44 ..
drwxrwxrwx 2 root root 4096 Jun  5 14:44 docker.sock

我会尝试在dind容器中使用TCP侦听器而不是sock文件运行docker守护进程:

代码语言:javascript
复制
spec:
  containers:
    - name: jenkins
      image: cyrilpanicker/jenkins
    - name: docker
      image: docker:dind
      command: ["dockerd"]
      args: ["-H", "tcp://127.0.0.1:2376"]
      ports:
        - containerPort: 2376
      securityContext:
        privileged: true
代码语言:javascript
复制
jenkins@static-web:/$ docker -H tcp://127.0.0.1:2376 ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

然后将jenkins配置为使用tcp://127.0.0.1:2376作为远程docker守护进程。

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

https://stackoverflow.com/questions/67843919

复制
相关文章

相似问题

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