无法让Jenkins Docker奴隶构建docker图像

时间:2016-07-26 08:05:18

标签: jenkins docker

我目前正在尝试将Docker与Jenkins结合使用,以简化新项目的CI / CD工作流程。我在安装了Docker 1.12的Mac上这样做。

这就是我的所作所为:

  1. 使用docker machine创建新的Docker服务器
  2. 使用官方的Jenkins Docker镜像来启动该服务器上的Jenkins实例
  3. 安装“又一个Docker插件”和“CloudBees Docker Pipeline”插件。
  4. 使用上面的Docker服务器的IP和第三方Docker DinD图像tehranian / dind-jenkins-slave
  5. 添加“Docker Cloud”

    通过这个设置,我运行一个非常简单的管道工作,如下所示:

    node('docker') {
        docker.image('hseeberger/scala-sbt').inside {
            stage 'Checkout'
            echo 'We got here!'
        }
    }
    

    Jenkins按预期旋转一个Docker实例并执行该作业。所以基本的Docker设置正如预期的那样工作。

    但是作业中的Docker命令失败了。日志输出如下所示:

    [Pipeline] node
    Still waiting to schedule task
    Docker-23ebf3d8dd4f is offline
    Running on Docker-23ebf3d8dd4f in /home/jenkins/workspace/docker-test
    [Pipeline] {
    [Pipeline] sh
    [docker-test] Running shell script
    + docker inspect -f . hseeberger/scala-sbt
    
    Cannot connect to the Docker daemon. Is the docker daemon running on this host?
    [Pipeline] sh
    [docker-test] Running shell script
    + docker pull hseeberger/scala-sbt
    Using default tag: latest
    Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon. Is the docker daemon running on this host?). Using system default: https://index.docker.io/v1/
    Cannot connect to the Docker daemon. Is the docker daemon running on this host?
    [Pipeline] }
    [Pipeline] // node
    [Pipeline] End of Pipeline
    

    现在,当我浏览解决方案时,通常会提到Docker套接字需要作为卷提供给容器,但这似乎也不起作用。

    由于一般设置似乎正在运行,奴隶是否只需要做一样的事情,就像Jenkins插件首先启动Docker奴隶一样?也就是说,使用Docker服务器的URL来控制它?由于我认为这是一个非常常见的用例,Jenkins Docker奴隶必须有一个Docker镜像,可以开箱即用,对吧?我错过了什么?

1 个答案:

答案 0 :(得分:0)

您可能需要设置docker env并在正在运行的shellcript中使用docker-machine env node的内容。