Table of Contents
There are times you need to build docker images inside Jenkins. Well, actually that is a common practice nowadays. However, without setting up docker client properly, you might now be able to do so.
When running Jenkins without docker client, you may encounter errors like this:
java.io.IOException: error=2, No such file or directory
at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
Caused: java.io.IOException: Cannot run program "docker": error=2, No such file or directory
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at hudson.Proc$LocalProc.<init>(Proc.java:254)
at hudson.Proc$LocalProc.<init>(Proc.java:223)
at hudson.Launcher$LocalLauncher.launch(Launcher.java:997)
at hudson.Launcher$ProcStarter.start(Launcher.java:509)
at hudson.Launcher$ProcStarter.join(Launcher.java:520)
at org.jenkinsci.plugins.docker.commons.impl.RegistryKeyMaterialFactory.materialize(RegistryKeyMaterialFactory.java:101)
at org.jenkinsci.plugins.docker.workflow.AbstractEndpointStepExecution2.doStart(AbstractEndpointStepExecution2.java:53)
at org.jenkinsci.plugins.workflow.steps.GeneralNonBlockingStepExecution.lambda$run$0(GeneralNonBlockingStepExecution.java:77)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
This post’s only purpose is to help you setup docker client correctly inside a Jenkins container so you can start building your images right away.
Step 1: Download the Docker client
There is a dedicated page to download the Docker client. Since I’m using Jenkins lts and it’s running Debian, I can get all versions here:
https://download.docker.com/linux/static/stable/x86_64/
Choose your version and copy the link.
Step 2: Install Docker client for Jenkins container
Now, with the link, exec into Jenkins container:
docker exec -it jenkins bash
Next, use wget to download the docker binary. If you don’t have wget
installed, simply run:
apt update && apt install wget
And download the archive file:
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
Then extract it:
tar -xf docker-20.10.9.tgz
Now, it will extract a folder called docker
. However, you just need one binary file named docker
inside that folder.
The last step is to move that file to /usr/local/bin
(Create this folder if it doesn’t exist)
mv ./docker/docker /usr/local/bin
Now Jenkins can build docker images without problems:

Conclusion
With a few very simple steps, you can now build docker images inside Jenkins.

I build softwares that solve problems. I also love writing/documenting things I learn/want to learn.