Jenkins基础:Jenkinsfile使用实例:Cannot connect to the Docker daemon对应方法

当在Jenkinsfile中使用docker命令时,可能会遇到"Cannot connect to the Docker daemon"的错误。该问题通常由于Jenkins容器无法访问宿主机的Docker服务引起。文章介绍了三种解决方案:1) 使用-H选项指定Docker服务地址;2) 设置DOCKER_HOST环境变量;3) 挂载docker.sock文件。每种方法都提供了具体的操作步骤和示例。
摘要由CSDN通过智能技术生成

在Jenkinsfile中通过使用docker{}可以进行镜像和容器的相关操作,但是使用的时候经常会出现Cannot connect to the Docker daemon的提示信息,这篇文章整理一下常见的对应方法。

现象

环境准备

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值