对接Jenkins无法找到对接器

6ojccjat  于 2022-11-02  发布在  Jenkins
关注(0)|答案(2)|浏览(213)

我正在尝试建立Jenkins管道,它能够构建Docker映像。但在执行管道后,我遇到了docker: not found问题。Jenkinsfile包含以下内容:

pipeline {
    agent { dockerfile true }
    stages {
        stage('Test') {
            steps {
                sh 'docker --version '
            }
        }
    }
}

这是一个简单的启动脚本。但似乎dockerized Jenkins安装找不到合适的docker安装来使用。所需的插件(DockerDocker pipeline)已安装,并且存在全局docker安装配置。但错误仍在继续。
Jenkins设置是通过使用以下docker-compose完成的:

version: '3.1'

networks:
  docker:

volumes:
  jenkins-data:
  jenkins-docker-certs:

services:

  jenkins:
    image: jenkins/jenkins:lts
    restart: always
    networks:
      - docker
    ports:
      - 8090:8080
      - 50000:50000
    tty: true
    volumes:
      - jenkins-data:/var/jenkins_home
      - jenkins-docker-certs:/certs/client:ro
      - $HOME:/home
    environment:
      - DOCKER_HOST=tcp://docker:2376
      - DOCKER_CERT_PATH=/certs/client
      - DOCKER_TLS_VERIFY=1

  dind:
    image: docker:dind
    privileged: true
    restart: always
    networks:
      docker:
        aliases:
          - docker
    ports:
      - 2376:2376
    tty: true
    volumes:
      - jenkins-data:/var/jenkins_home
      - jenkins-docker-certs:/certs/client
      - $HOME:/home
    environment:
      - DOCKER_TLS_CERTDIR=/certs

在阅读了更多关于这个问题的帖子并阅读了Jenkins的官方文档后,我想应该使用docker:dind来实现这个目的。也许我错过了一些重要的配置?当启动docker:dind容器时,日志会显示以下警告消息:could not change group /var/run/docker.sock to docker: group docker not found,但该组存在,并且我可以在不指定sudo的情况下运行docker命令。(遵循了正式的docker安装后步骤)
另一个问题是Jenkins不能持久保存配置数据或管道相关的东西。重启机器后,我必须每次都通过向导,我不知道为什么。
有人也有类似的问题吗?
非常感谢您的建议!

0dxa2lsx

0dxa2lsx1#

您的docker-compose文件是正确的,您只需要在jenkins容器中添加一个卷:

- /usr/bin/docker:/usr/bin/docker

你也有很多不需要的配置,你可以检查这个link来查看其他可能的配置。你实际上使用的是解决方案3,你可以切换到这个docker-compose文件。
对于卷,它们应该是持久的,因为它们是在volume节中声明的。如果需要,可以尝试使用外部卷。

35g0bw71

35g0bw712#

快进一年,我遇到了类似的问题,只是不匹配的GLIBC版本,如here所述。
我通过将Jenkins容器中的GLIBC版本升级到2.35来解决此问题为了实现这一点,我不得不基于ubuntu:jammy和JDK 17构建我自己的Jenkins容器,使用的模板来自官方的基于Debian的Jenkins容器(来源于here)。现在GLIBC版本同意,并且可以使用安装在Ubuntu Jammy主机上的docker构建docker-in-docker Jenkins版本:

$ ldd --version
ldd (Ubuntu GLIBC 2.35-0ubuntu3.1) 2.35

# vs.

$ docker run --rm -it mirekphd/jenkins-jdk17-on-ubuntu-2204:2.374 ldd --version
ldd (Ubuntu GLIBC 2.35-0ubuntu3.1) 2.35

请随意使用这个容器(最好使用latest标记),因为我将不得不维护它以供我们自己内部使用,将其构建设置为... Jenkins管道之一(尽管存在引导程序问题)。它将是一个Docker-in-DockerJenkins-in-Jenkins管道:)

相关问题