首页 > 解决方案 > 为什么我的 docker build 在 jenkins 代理上失败?

问题描述

这是我Jenkinsfile在项目中的管道

pipeline {
    agent {
        docker {
            image 'docker:dind'
            args '-u root:root -p 3000:3000 --privileged'
        }
    }

    environment {
        CI = 'true'
    }

    stages {
        stage('docker build') {
            when {
                branch 'master'
            }
            steps {
                sh 'docker build --label v1.0.0 -t myrepo/myapp:v1.0.0'
            }
        }
    }
}

我分别有一个詹金斯主代理和从代理。上述管道在主节点上运行良好,但如果在从代理节点上运行,则会遇到以下错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

我很确定 docker 正在代理节点上运行,因为我可以 ssh 到它并成功运行 docker 命令。

为什么它在主代理和从代理上运行时表现不同?我应该如何解决它?非常感谢!

标签: dockerjenkins-pipeline

解决方案


我不知道为什么,但我通过以下更改修复了它:附加-v /var/run/docker.sock:/var/run/docker.sock到 args。

pipeline {
    agent {
        docker {
            image 'docker:dind'
            args '-u root:root -p 3000:3000 --privileged -v /var/run/docker.sock:/var/run/docker.sock'
        }
    }

    environment {
        CI = 'true'
    }

    stages {
        stage('docker build') {
            when {
                branch 'master'
            }
            steps {
                sh 'docker build --label v1.0.0 -t myrepo/myapp:v1.0.0'
            }
        }
    }
}

推荐阅读