Docker not found when building docker image using

2019-03-25 07:26发布

I have a Jenkins running as a docker container, now I want to build a Docker image using pipeline, but Jenkins container always tells Docker not found.

[simple-tdd-pipeline] Running shell script
+ docker build -t simple-tdd .
/var/jenkins_home/workspace/simple-tdd-pipeline@tmp/durable-
ebc35179/script.sh: 2: /var/jenkins_home/workspace/simple-tdd-
pipeline@tmp/durable-ebc35179/script.sh: docker: not found

Here is how I run my Jenkins image:

docker run --name myjenkins -p 8080:8080 -p 50000:50000 -v 
/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock 
jenkins

And the DockerFile of Jenkins image is: https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dockerfile

3条回答
干净又极端
2楼-- · 2019-03-25 07:52

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.

查看更多
唯我独甜
3楼-- · 2019-03-25 08:01

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.

enter image description here

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}"
    }
查看更多
做个烂人
4楼-- · 2019-03-25 08:04

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

查看更多
登录 后发表回答