在Jenkinsfile中通过使用docker{}可以进行镜像和容器的相关操作,但是使用的时候经常会出现Cannot connect to the Docker daemon的提示信息,这篇文章整理一下常见的对应方法。
现象
环境准备
-
Docker方式启动Jenkins
详细参看: https://liumiaocn.blog.csdn.net/article/details/92764938 -
Jenkinsfile
Jenkinsfile内容如下
pipeline {
agent {
docker {
image 'liumiaocn/maven:3.6.1'
}
}
stages {
stage('Build') {
steps {
sh 'echo jdk version ...'
sh 'java -version'
}
}
stage('Test'){
steps {
sh 'echo maven version ...'
sh 'mvn --version'
}
}
stage('Deploy') {
steps {
sh 'echo Deploy stage ...'
}
}
}
}
现象
执行日志信息如下所示
Started by user root
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /data/jenkins/workspace/pipeline_job_dockersingle
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . liumiaocn/maven:3.6.1
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[Pipeline] sh
+ docker pull liumiaocn/maven:3.6.1
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
- 简单的再现方法
使用docker命令连接不上Docker服务,都会提示此信息,最简单的方式之一,直接使用docker version命令即可。
[root@devops jenkins]# docker exec -it jenkins_jenkins_1 sh
/ # docker version
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
/ #
原因
此处因为Jenkins为容器方式启动,而在Jenkins中使用docker客户端进行操作,而实际上使用的服务是Jenkins容器宿主机器的Docker服务,缺省方式下使用/var/run/docker.sock的socket通信文件,此文件在Jenkins容器中并不能直接访问,所以导致出现的上诉错误提示信息。
对应方式
对应方法1: 活用-H选项
对应方法:
-H选项可以指定连接的Docker服务的地址,比如执行docker verison的命令可以变为:
docker version
/ # docker -H tcp://192.168.163.141:4243 version
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.26 (downgraded from 1.39)
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 1.13.1
API version: 1.26 (minimum versi