web-dev-qa-db-fra.com

Docker introuvable lors de la création d'une image Docker à l'aide du pipeline de conteneurs Docker Jenkins

J'ai un Jenkins fonctionnant en tant que conteneur Docker, maintenant je veux construire une image Docker en utilisant un pipeline, mais le conteneur Jenkins indique toujours à Docker non trouvé.

[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

Voici comment je lance mon image Jenkins:

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

Et l'image DockerFile de Jenkins est: https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dockerfile

17
kitko112

Vous manquez le client docker. Installez-le comme ceci dans 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

15
Robert

Edit: mai 2018

Comme indiqué par Guillaume Husta , ce article de blog de jpetazzo décourage cette technique:

Les anciennes versions de ce message conseillaient à bind-mount le binaire docker de l'hôte vers le conteneur. Ce n'est plus fiable, car le moteur Docker n'est plus distribué sous forme de bibliothèques (presque) statiques.

Le client Docker doit être installé à l'intérieur d'un conteneur comme décrit ici . De plus, jenkins utilisateur doit être dans le groupe docker, donc exécutez ce qui suit:

$ docker exec -it -u root my-jenkins /bin/bash
# usermod -aG docker jenkins

et enfin redémarrer my-jenkins récipient.

Réponse originale:

Vous pouvez utiliser le docker engine comme dans ce @ 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

Cela évite d'avoir plusieurs versions du moteur docker sur l'hôte et le conteneur jenkins.

8
François Maturel

Dans votre interface Jenkins, allez à "Gérer la configuration Jenkins/Global Tool"

Faites ensuite défiler la page jusqu'à Installations Docker et cliquez sur "Ajouter Docker" . Donnez-lui un nom comme "myDocker"

Assurez-vous de cocher la case qui dit "Installer automatiquement" . Cliquez sur "Ajouter un programme d'installation" et sélectionnez "Télécharger sur docker.com" . Laissez "dernier" dans la version Docker. Assurez-vous de cliquer sur Enregistrer.

enter image description here

Dans votre fichier Jenkins, ajoutez l'étape suivante avant d'exécuter des commandes Docker:

 stage('Initialize'){
        def dockerHome = tool 'myDocker'
        env.PATH = "${dockerHome}/bin:${env.PATH}"
    }
5
Harry
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

Ajoutez simplement l'option --group-add docker lors de l'exécution de docker.

0
win5do