我正在尝试建立Jenkins管道,它能够构建Docker映像。但在执行管道后,我遇到了docker: not found
问题。Jenkinsfile
包含以下内容:
pipeline {
agent { dockerfile true }
stages {
stage('Test') {
steps {
sh 'docker --version '
}
}
}
}
这是一个简单的启动脚本。但似乎dockerized Jenkins安装找不到合适的docker安装来使用。所需的插件(Docker
和Docker 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不能持久保存配置数据或管道相关的东西。重启机器后,我必须每次都通过向导,我不知道为什么。
有人也有类似的问题吗?
非常感谢您的建议!
2条答案
按热度按时间0dxa2lsx1#
您的docker-compose文件是正确的,您只需要在jenkins容器中添加一个卷:
你也有很多不需要的配置,你可以检查这个link来查看其他可能的配置。你实际上使用的是解决方案3,你可以切换到这个docker-compose文件。
对于卷,它们应该是持久的,因为它们是在volume节中声明的。如果需要,可以尝试使用外部卷。
35g0bw712#
快进一年,我遇到了类似的问题,只是不匹配的GLIBC版本,如here所述。
我通过将Jenkins容器中的GLIBC版本升级到2.35来解决此问题为了实现这一点,我不得不基于
ubuntu:jammy
和JDK 17构建我自己的Jenkins容器,使用的模板来自官方的基于Debian的Jenkins容器(来源于here)。现在GLIBC版本同意,并且可以使用安装在Ubuntu Jammy主机上的docker构建docker-in-docker Jenkins版本:请随意使用这个容器(最好使用
latest
标记),因为我将不得不维护它以供我们自己内部使用,将其构建设置为... Jenkins管道之一(尽管存在引导程序问题)。它将是一个Docker-in-DockerJenkins-in-Jenkins管道:)