Dockerized Jenkins 无法找到 docker
Dockerized Jenkins not able to find docker
我正在尝试建立一个能够构建 docker 图像的 Jenkins 管道。但是我运行在执行管道后进入了问题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
在阅读了更多关于该问题的 post 并遵循 Jenkins 官方文档后,我认为为此目的使用了 docker:dind
。也许我在这里错过了一些重要的配置?启动 docker:dind
容器时,日志显示以下警告消息:could not change group /var/run/docker.sock to docker: group docker not found
,但该组存在并且我能够 运行 docker 命令而不指定 [=21] =]. (按照官方dockerpost-安装步骤)
现在的另一个问题是,Jenkins 无法保留一般的配置数据或管道相关的东西。重启机器后每次都要通过向导,我不知道为什么。
有人遇到过类似的问题吗?
多谢指教!
你的 docker-compose 文件是正确的,你只需要在 jenkins 容器中添加一个卷:
- /usr/bin/docker:/usr/bin/docker
您还有很多不需要的配置,您可以查看此link以查看其他可能的配置。您实际上使用的是解决方案 3,您可以切换到这个 docker-compose 文件。
对于卷,它们应该被持久化,因为它们是在卷部分中声明的。如果需要,您可以尝试使用 external volumes。
我正在尝试建立一个能够构建 docker 图像的 Jenkins 管道。但是我运行在执行管道后进入了问题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
在阅读了更多关于该问题的 post 并遵循 Jenkins 官方文档后,我认为为此目的使用了 docker:dind
。也许我在这里错过了一些重要的配置?启动 docker:dind
容器时,日志显示以下警告消息:could not change group /var/run/docker.sock to docker: group docker not found
,但该组存在并且我能够 运行 docker 命令而不指定 [=21] =]. (按照官方dockerpost-安装步骤)
现在的另一个问题是,Jenkins 无法保留一般的配置数据或管道相关的东西。重启机器后每次都要通过向导,我不知道为什么。
有人遇到过类似的问题吗?
多谢指教!
你的 docker-compose 文件是正确的,你只需要在 jenkins 容器中添加一个卷:
- /usr/bin/docker:/usr/bin/docker
您还有很多不需要的配置,您可以查看此link以查看其他可能的配置。您实际上使用的是解决方案 3,您可以切换到这个 docker-compose 文件。
对于卷,它们应该被持久化,因为它们是在卷部分中声明的。如果需要,您可以尝试使用 external volumes。