Skip to main content

[SOLVED] How to Fix Docker Not Found When Building Docker Image Using Docker Jenkins Container Pipeline - jenkins?

[SOLVED] Fixing the “Docker Not Found” Issue in Jenkins Container Pipeline for Building Docker Images

In this chapter, we will talk about the common problem of Docker not being found when we build Docker images using the Jenkins container pipeline. This issue can slow down our work and make us frustrated. We will give a simple guide on how to fix this problem. By following the steps we give, we can make sure our Jenkins pipeline has Docker support to build images without problems.

Here is a quick look at the solutions we will cover:

  • Part 1 - Check Docker Installation in Jenkins Container
  • Part 2 - Install Docker Inside Jenkins Container
  • Part 3 - Set Up Jenkins Pipeline with Docker Support
  • Part 4 - Use Docker-in-Docker (DinD) for Building Images
  • Part 5 - Change Jenkins Agent Settings for Docker Access
  • Part 6 - Make Sure Docker Socket Has Right Permissions

By following these steps, we can fix the Docker not found issue and make our development work smoother. For more tips on related topics, we can check out our guides on fixing Maven dependencies and correct format for configurations. Also, we might find our article on fixing trust anchors helpful as we keep improving our CI/CD processes.

Part 1 - Verify Docker Installation in Jenkins Container

If we have a problem with Docker not being found when building a Docker image in the Jenkins container pipeline, we need to check if Docker is installed in the Jenkins container first. Let’s follow these steps:

  1. Access Jenkins Container:
    Open your terminal. Then run this command to get into the Jenkins container:

    docker exec -it jenkins_container_name /bin/bash
  2. Check Docker Installation:
    Now, inside the Jenkins container, we will run:

    docker --version

    If Docker is installed, we will see the version information. If we see a “command not found” error, it means Docker is not installed.

  3. Verify Docker Daemon:
    We need to make sure the Docker daemon is running. We can check this by running:

    service docker status

    If it is not running, we can start it with:

    service docker start
  4. Environment Variables:
    We need to check the environment variables for Docker. We can do this by running:

    printenv | grep DOCKER

    We must make sure that important variables like DOCKER_HOST are set correctly.

If we find that Docker is not installed, we will need to install it. For more details on how to install Docker, please check this guide.

After we confirm that Docker is installed and the daemon is running, we can move on to fix the “Docker not found” issue in our Jenkins pipeline.

Part 2 - Install Docker Inside Jenkins Container

To fix the “Docker not found” problem when we build Docker images in a Jenkins container pipeline, we need to install Docker inside the Jenkins container. Here are the steps:

  1. Access Jenkins Container:
    First, we need to get into our running Jenkins container. We can use this command:

    docker exec -it <jenkins_container_name> /bin/bash
  2. Update Package Index:
    Next, we update the package index. This helps us get the latest information about repositories:

    apt-get update
  3. Install Required Packages:
    Now, we install the packages we need for Docker:

    apt-get install -y apt-transport-https ca-certificates curl software-properties-common
  4. Add Docker’s Official GPG Key:
    We need to add the official GPG key for Docker:

    curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
  5. Set up the Stable Repository:
    Then, we add the Docker stable repository:

    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
  6. Install Docker:
    After that, we can install Docker with this command:

    apt-get update
    apt-get install -y docker-ce
  7. Verify Docker Installation:
    Once we finish installation, we should check if Docker is working. We can do this by checking the version:

    docker --version
  8. Exit the Container:
    Finally, we can exit from the Jenkins container:

    exit

By following these steps, we will install Docker inside our Jenkins container. This will let us build Docker images easily. For more help on fixing related problems, we can look at how to fix Maven dependencies or see what is the correct format for Docker commands.

Part 3 - Configure Jenkins Pipeline with Docker Support

We will configure our Jenkins pipeline for Docker support. We need to make sure our Jenkinsfile is set up right to use Docker. Here is how we can do this:

  1. Set Up Jenkinsfile: We should create or edit our Jenkinsfile in our repository. We need to include these stages to build Docker images and run Docker containers.

    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    script {
                        dockerImage = docker.build("my-app:${env.BUILD_ID}")
                    }
                }
            }
            stage('Test') {
                steps {
                    script {
                        dockerImage.inside {
                            sh 'run_tests.sh'
                        }
                    }
                }
            }
            stage('Deploy') {
                steps {
                    script {
                        dockerImage.push("latest")
                    }
                }
            }
        }
    }
  2. Add Docker Plugin: We must check if we have the Docker Pipeline plugin in Jenkins. We go to Manage Jenkins > Manage Plugins > Available and search for “Docker Pipeline”.

  3. Set Docker Credentials: If our Docker registry needs login, we must add Docker credentials:

    • Go to Manage Jenkins > Credentials > (global) > Add Credentials.
    • We choose the type as “Username with password” and fill in our Docker registry details.
  4. Use Docker in Pipeline: In our pipeline script, we can use Docker commands directly. For example, we can add a stage to pull a Docker image:

    stage('Pull Image') {
        steps {
            script {
                docker.image('my-docker-image:latest').pull()
            }
        }
    }
  5. Configure Pipeline with Docker Registry: If we use a private Docker registry, we need to set the registry URL in our Jenkins settings. We can do this in the withDockerRegistry block:

    stage('Build with Registry') {
        steps {
            script {
                docker.withRegistry('https://my-registry-url', 'docker-credentials-id') {
                    dockerImage = docker.build("my-app:${env.BUILD_ID}")
                }
            }
        }
    }

By following these steps, we can set up our Jenkins pipeline with Docker support. This lets us build and manage Docker images easily. If we need more help with Jenkins configurations, we can check this link.

Part 4 - Use Docker-in-Docker (DinD) for Building Images

To fix the “Docker not found” error when we build our Docker image in a Jenkins container pipeline, we can use Docker-in-Docker (DinD). This lets us run Docker commands inside a Docker container. It is important for CI/CD pipelines where Jenkins runs in a container.

  1. Modify Jenkins Pipeline to Use DinD
    We need to update our Jenkins pipeline setup to add DinD as a service. Here is an example of a Jenkinsfile:

    pipeline {
        agent {
            docker {
                image 'docker:19.03-dind'
                args '-privileged'
            }
        }
        stages {
            stage('Build') {
                steps {
                    script {
                        // Use Docker commands here
                        sh 'docker build -t my-image:latest .'
                    }
                }
            }
        }
    }
  2. Run Jenkins with Docker-in-Docker
    We should start our Jenkins container with the right settings to allow DinD:

    docker run --privileged --name jenkins-dind \
        -d -p 8080:8080 \
        -p 50000:50000 \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v jenkins_home:/var/jenkins_home \
        jenkins/jenkins:lts
  3. Install Docker Client
    If our Jenkins pipeline needs the Docker client, we need to make sure it is installed in Jenkins:

    docker exec -it jenkins-dind sh -c "apk add --no-cache docker"
  4. Configure Docker Daemon
    We need to check that the Docker daemon is running in the Jenkins container. We can start it with:

    dockerd &
  5. Set Up Docker Registry Authentication
    If we are using a private Docker registry, we must set up our credentials:

    withCredentials([usernamePassword(credentialsId: 'docker-credentials', passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME')]) {
        sh "echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin"
    }

Using Docker-in-Docker helps us solve the “Docker not found” problem when we build Docker images in Jenkins running in a container. For more help on related issues, we can check this article on Maven dependencies or this guide on trust anchors.

Part 5 - Adjust Jenkins Agent Settings for Docker Access

To fix the “Docker not found” error when we build Docker images using the Jenkins container pipeline, we need to change the Jenkins agent settings for Docker access. Here are steps we can follow to make sure our Jenkins agent can work with Docker:

  1. Add Docker Group to Jenkins User: We must make sure the Jenkins user is in the Docker group. This lets the Jenkins user run Docker commands without using sudo.

    sudo usermod -aG docker jenkins
  2. Restart Jenkins Service: After we add the Jenkins user to the Docker group, we should restart the Jenkins service to apply the changes.

    sudo systemctl restart jenkins
  3. Configure Jenkins Pipeline: In our Jenkins pipeline script, we need to use the right Docker agent and write the Docker commands correctly. Here is an example pipeline snippet:

    pipeline {
        agent {
            docker {
                image 'docker:latest'
                args '-v /var/run/docker.sock:/var/run/docker.sock'
            }
        }
        stages {
            stage('Build') {
                steps {
                    sh 'docker build -t my-image .'
                }
            }
        }
    }
  4. Set Environment Variables: If we need it, we can set some environment variables in Jenkins to let Docker work.

    environment {
        DOCKER_HOST = 'unix:///var/run/docker.sock'
    }
  5. Validate Docker Access: We can use a simple shell command in a pipeline stage to check if Docker is working.

    stage('Check Docker') {
        steps {
            sh 'docker --version'
        }
    }

By following these steps, we can adjust Jenkins agent settings for Docker access. This will help stop the “Docker not found” error when we build Docker images. If we have more problems with dependencies, we can check out how to fix Maven dependencies.

Part 6 - Ensure Proper Permissions for Docker Socket

To fix the “Docker not found” problem when we build Docker images in a Jenkins container pipeline, we need to make sure the permissions for the Docker socket are right. The Docker socket (/var/run/docker.sock) must be open for the Jenkins user or the user that Jenkins uses. Here is how we can do this:

  1. Add Jenkins User to Docker Group:
    We need to give the Jenkins user permission to use Docker by adding it to the Docker group.

    sudo usermod -aG docker jenkins
  2. Set Permissions on Docker Socket:
    First, we check the current permissions and change them if needed.

    ls -l /var/run/docker.sock

    If the permissions are not right, we can change them to allow group access:

    sudo chmod 666 /var/run/docker.sock
  3. Restart Jenkins:
    After we make these changes, we need to restart the Jenkins service so it can use the new group permissions.

    sudo systemctl restart jenkins
  4. Verify Permissions:
    After we restart Jenkins, we should check if the Jenkins user can run Docker commands.

    We can run a simple Docker command in a Jenkins pipeline to see if Docker works fine:

    pipeline {
        agent any
        stages {
            stage('Test Docker') {
                steps {
                    sh 'docker info'
                }
            }
        }
    }

If we follow these steps, we will make sure Jenkins has the right permissions to access the Docker socket. This should fix the “Docker not found” issue in our Jenkins container pipeline. If we still have problems, we can check related settings on Maven dependencies and trust anchors.

Frequently Asked Questions

1. Why is Docker not found when building an image in Jenkins?

We may not find Docker in Jenkins because of installation problems or wrong settings. The Docker command might not be available in the Jenkins container. To fix this, we should check if Docker is installed in the Jenkins container. You can follow the steps in Part 1 - Verify Docker Installation in Jenkins Container. This helps to make sure that Docker is set up correctly to build images.

2. How can I install Docker inside a Jenkins container?

To install Docker in a Jenkins container, we need to follow some steps for good integration. We can use the official Docker installation guide or look at Part 2 - Install Docker Inside Jenkins Container. This part gives a simple guide to install Docker right, so Jenkins can use Docker commands to build images.

3. What configurations are needed for Jenkins Pipeline to support Docker?

We need to set up some plugins and environment variables to get our Jenkins Pipeline ready for Docker. Check Part 3 - Configure Jenkins Pipeline with Docker Support for clear instructions. By following this guide, we can make sure our Jenkins pipeline builds Docker images without problems.

4. What is Docker-in-Docker (DinD) and when should I use it?

Docker-in-Docker (DinD) lets us run Docker containers inside another Docker container. This is very useful for CI/CD pipelines in Jenkins. We can use this when we need separate environments for building and testing Docker images. For more details, see Part 4 - Use Docker-in-Docker (DinD) for Building Images in this article.

5. How do I fix permission issues with Docker socket in Jenkins?

We often have permission issues with the Docker socket in Jenkins when the Jenkins user does not have the right access. To fix this, we should make sure the Jenkins user is in the Docker group or change the permissions of the Docker socket. You can find steps for this in Part 6 - Ensure Proper Permissions for Docker Socket. This will help Jenkins to use Docker features easily.

Comments