Докер не найден при создании изображения докеров с использованием контейнерного трубопровода Docker Jenkins

У меня есть Jenkins, работающий как контейнер докеров, теперь я хочу создать изображение Docker с использованием конвейера, но контейнер Jenkins всегда сообщает, что Docker не найден.

[simple-tdd-pipeline] Running shell script
+ docker build -t simple-tdd .
/var/jenkins_home/workspace/[email protected]/durable-
ebc35179/script.sh: 2: /var/jenkins_home/workspace/simple-tdd-
[email protected]/durable-ebc35179/script.sh: docker: not found

Вот как я запускаю изображение 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

И изображение DockerFile Дженкинса: https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dockerfile

Ответ 1

Вам не нужен клиент докеров. Установите его в файл 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

Источник

Ответ 2

Изменение: май 2018

Как указывает Гийом Хуста, эта статья в блоге jpetazzo не одобряет эту технику:

В более ранних версиях этого поста рекомендовалось bind-mount бинарный файл докера от хоста к контейнеру. Это больше не является надежным, потому что Docker Engine больше не распространяется как (почти) статические библиотеки.

Docker клиент должен быть установлен внутри контейнера, как описано здесь. Кроме того, jenkins пользователь должен быть в docker группе, поэтому выполнить следующие действия:

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

и, наконец, перезапустите контейнер my-jenkins.

Оригинальный ответ:

Вы можете использовать хост docker engine, как в этом @Adrian Муит блог статью.

 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.

Ответ 3

В интерфейсе Jenkins перейдите к "Управление настройками Jenkins/Global Tool"

Затем прокрутите вниз до Установки Docker и нажмите "Добавить Docker". Дайте ему имя, как "myDocker"

Обязательно установите флажок "Установить автоматически". Нажмите "Добавить установщик" и выберите "Загрузить с docker.com". Оставьте "последний" в версии Docker. Убедитесь, что вы нажимаете Сохранить.

enter image description here

В вашем Jenkinsfile добавьте следующий этап, прежде чем запускать какие-либо команды Docker:

 stage('Initialize'){
        def dockerHome = tool 'myDocker'
        env.PATH = "${dockerHome}/bin:${env.PATH}"
    }

Ответ 4

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.