Докер не найден при создании изображения докеров с использованием контейнерного трубопровода 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.