Docker not found when building docker image using Docker Jenkins container pipeline

喜你入骨 提交于 2019-12-03 01:44:39

You're missing the docker client. Install it as this in Dockerfile:

RUN curl -fsSLO https://get.docker.com/builds/Linux/x86_64/docker-17.04.0-ce.tgz \
  && tar xzvf docker-17.04.0-ce.tgz \
  && mv docker/docker /usr/local/bin \
  && rm -r docker docker-17.04.0-ce.tgz

Source

François Maturel

Edit: May 2018

As pointed by Guillaume Husta, this jpetazzo's blog article discourages this technique:

Former versions of this post advised to bind-mount the docker binary from the host to the container. This is not reliable anymore, because the Docker Engine is no longer distributed as (almost) static libraries.

Docker client should be installed inside a container as described here. Also, jenkins user should be in docker group, so execute following:

$ docker exec -it -u root my-jenkins /bin/bash
# usermod -aG docker jenkins

and finally restart my-jenkins container.

Original answer:

You could use host's docker engine like in this @Adrian Mouat blog article.

 docker run -d \
   --name my-jenkins \
   -v /var/jenkins_home:~/.jenkins \
   -v /var/run/docker.sock:/var/run/docker.sock \
   -p 8080:8080 jenkins

This avoids having multiple docker engine version on host and jenkins container.

In your Jenkins interface go to "Manage Jenkins/Global Tool Configuration"

Then scroll down to Docker Installations and click "Add Docker". Give it a name like "myDocker"

Make sure to check the box which says "Install automatically". Click "Add Installer" and select "Download from docker.com". Leave "latest" in the Docker version. Make sure you click Save.

In your Jenkinsfile add the following stage before you run any docker commands:

 stage('Initialize'){
        def dockerHome = tool 'myDocker'
        env.PATH = "${dockerHome}/bin:${env.PATH}"
    }
docker run -d \
--group-add docker \
-v $(pwd)/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-p 8080:8080 -p 50000:50000 \
jenkins/jenkins:lts

Just add option --group-add docker when docker run.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!