I have Jenkins working as a docker container, now I want to create a Docker image using the pipeline, but the Jenkins container always reports that the Docker was 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
This is how I launch the 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 Jenkins DockerFile image: https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dockerfile
You do not need a docker client. Install it in the 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
Change: May 2018
, jpetazzo :
bind-mount . , Docker Engine () .
bind-mount
Docker , . , jenkins docker , :
jenkins
docker
$ docker exec -it -u root my-jenkins /bin/bash # usermod -aG docker jenkins
, , my-jenkins.
my-jenkins
:
docker engine, @Adrian .
docker engine
docker run -d \ --name my-jenkins \ -v /var/jenkins_home:~/.jenkins \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 8080:8080 jenkins
jenkins.
Jenkins " Jenkins/Global Tool"
Docker " Docker". , "myDocker"
" ". " " " docker.com". "" Docker. , .
Jenkinsfile , - Docker:
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
--group-add docker docker.
--group-add docker