簡體   English   中英

使用 Docker Z2E54334C0A5CE2ADAZE3E5A5845DF3AB3 構建 docker 映像時未找到 Docker

[英]Docker not found when building docker image using Docker Jenkins container pipeline

I have a Jenkins running as a docker container, now I want to build a Docker image using pipeline, but Jenkins container always tells Docker not found.

[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

這是我運行 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

And the DockerFile of Jenkins image is: https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dockerfile

您缺少 docker 客戶端。 在 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

資源

在您的 Jenkins 界面中,轉到“管理 Jenkins/全局工具配置”

然后向下滾動到 Docker Installations 並單擊"Add Docker" 給它起一個名字,比如“myDocker”

確保選中“自動安裝”復選框。 單擊“添加安裝程序”並選擇“從 docker.com 下載” 在 Docker 版本中保留“最新”。 確保單擊“保存”。

在此處輸入圖像描述

在運行任何 docker 命令之前,在 Jenkinsfile 中添加以下階段:

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

編輯:2018 年 5 月

正如Guillaume Husta 所指出的,這篇jpetazzo 的博客文章不鼓勵這種技術:

這篇文章的早期版本建議將 docker 二進制文件從主機bind-mount到容器。 這不再可靠,因為 Docker 引擎不再作為(幾乎)靜態庫分發。

Docker 客戶端應安裝在容器內,如此所述。 此外, jenkins用戶應該在docker組中,因此執行以下操作:

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

最后重新啟動my-jenkins容器。

原答案:

您可以像在這篇@Adrian Mouat博客文章中那樣使用主機的 docker docker engine

 docker run -d \
   --name my-jenkins \
   -v /var/jenkins_home:~/.jenkins \
   -v /var/run/docker.sock:/var/run/docker.sock \
   -p 8080:8080 jenkins

這避免了在主機和詹金斯容器上有多個 docker 引擎版本。

問題出在您的 Jenkins 中,即使您確實從插件管理器安裝了 docker,它也無法使用 docker 引擎。 根據我的研究,有一些替代方法可以解決此問題:

1:使用一些 docker 鏡像構建一個鏡像,其中包含預安裝的 docker,如getintodevops/jenkins-withdocker:lts提供的

2:從 jenkins/jenkins 構建映像,將卷安裝到您的主機,然后通過創建另一個具有相同卷的容器並執行 bash cmd 來安裝 docker 或使用Robert建議自行安裝 docker

docker run -p 8080:8080 -p 50000:50000 -v $HOME/.jenkins/:/var/jenkins_home 
-v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:latest

或 3:最簡單的,只需從主機添加安裝的 docker 路徑以供 jenkins 容器使用: -v $(which docker):/usr/bin/docker

您的 docker 命令應如下所示:

docker run \
--name jenkins --rm \
-u root -p 8080:8080 -p 50000:50000 \
-v $(which docker):/usr/bin/docker\
-v $HOME/.jenkins/:/var/jenkins_home 
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:latest

[來源] https://forums.docker.com/t/docker-not-found-in-jenkins-pipeline/31683

額外選項:如果您只想使用單個 Jenkis 服務器,則沒有任何意義,但始終可以使用映像安裝像 Ubuntu 這樣的操作系統並從那里安裝 jenkins .war 文件

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

只需在 docker run 時添加選項--group-add docker

將 docker path ie -v $(which docker):/usr/bin/docker添加到容器中,例如

 docker run -d \
   --name my-jenkins \
   -v $(which docker):/usr/bin/docker \
   -v /var/jenkins_home:~/.jenkins \
   -v /var/run/docker.sock:/var/run/docker.sock \
   -p 8080:8080 jenkins

本節幫助我在 jenkins 容器中安裝 docker: https ://www.jenkins.io/doc/book/installing/docker/#downloading-and-running-jenkins-in-docker

此外,我必須在步驟 4(a) 中將FROM jenkins/jenkins:2.303.1-lts-jdk11替換為jenkins/jenkins

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM