I have a jenkins master running as a container in my local Windows 11 machine with docker desktop installed. My goal is to run docker commands in pipelines that are executed in cloud agents. The error I am facing is:
Post "http://172.23.0.2:2375/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=test-image&target=&ulimits=null&version=1": dial tcp 172.23.0.2:2375: i/o timeout
I setup my environment following these steps. Firstly I build my jenkins master image using the following dockerfile:
FROM jenkins/jenkins:2.414.3-jdk17
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
Then I created a docker network:
docker network create jenkins
After I run my jenkins master container:
docker run --name jenkins-blueocean --restart=on-failure --detach `
--network jenkins --env DOCKER_HOST=tcp://docker:2376 `
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 `
--volume jenkins-data:/var/jenkins_home `
--volume jenkins-docker-certs:/certs/client:ro `
--publish 8080:8080 --publish 50000:50000 myjenkins-blueocean
Then I logged in my jenkins installing the suggested plugins and the docker plugin. After I run an alpine socat container:
docker run -d --restart=always -p 127.0.0.1:2376:2375 --network jenkins `
-v /var/run/docker.sock:/var/run/docker.sock alpine/socat tcp-listen:2375,fork,reuseaddr unix-connect:/var/run/docker.sock
After I inspected this container to get the IP address to use as Docker Host URI in the 'Cloud docker Configuration' section of jenkins. In this section I checked the 'Enabled' and the 'Expose DOCKER_HOST' options.
Then I added a new docker agent template using 'jenkins/jnlp-agent-docker' as docker image.
Then I configured my jenkins pipeline which connects to my github repository where I pushed the following Jenkinsfile.
pipeline {
agent {
node {
label 'docker-agent'
}
}
stages {
stage('Build') {
steps {
script {
echo "Bulding docker images"
dockerImage = docker.build("test-image", "./WebApiTest")
}
}
}
}
}
Now, if I try to build my pipeline, it is able to get the Jenkinsfile from my repo, but the building of the docker image fails with the error that I posted in the beginning of this question.