使用Docker Jenkins容器管道构建Docker映像时未找到Docker

tpgth1q7  于 2023-03-29  发布在  Jenkins
关注(0)|答案(8)|浏览(426)

我有一个Jenkins作为Docker容器运行,现在我想使用管道构建一个Docker映像,但Jenkins容器总是告诉Docker未找到。

[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

Jenkins图像的DockerFile是:https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dockerfile

bkhjykvo

bkhjykvo1#

你缺少了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

Source

p1tboqfb

p1tboqfb2#

在Jenkins界面中,转到 “管理Jenkins/全局工具配置”
然后向下滚动到Docker Installations并单击 “Add Docker”。给予它一个类似 “myDocker” 的名称
请确保勾选 “自动安装”。单击 “添加安装程序” 并选择 “从www.example.com下载docker.com”。在Docker版本中保留“最新”。请确保单击保存。

在你的Jenkinsfile中,在运行任何docker命令之前添加以下stage:

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

6vl6ewon3#

编辑日期:2018年5月

正如Guillaume Husta所指出的,这个jpetazzo's blog article不鼓励这种技术:
这篇文章的前版本建议将docker二进制文件从主机bind-mount到容器。这不再可靠,因为Docker引擎不再作为(几乎)静态库分发。
Docker客户端应该安装在容器中,如here所述。另外,jenkins用户应该在docker组中,因此执行以下操作:

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

最后重启my-jenkins容器。

原答复:

你可以像@Adrian Mouat博客article一样使用主机的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

这避免了在主机和jenkins容器上有多个docker引擎版本。

ghhaqwfi

ghhaqwfi4#

这个问题是在你的Jenkins,它是不能使用Docker引擎,即使你从插件管理器安装Docker.从我得到的研究有一些替代解决这个问题:

1:使用getintodevops/jenkins-withdocker:lts提供的某个预装了docker的docker镜像构建镜像
**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文件

5us2dqdw

5us2dqdw5#

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运行时添加选项--group-add docker即可。

wgx48brx

wgx48brx6#

将docker路径(即-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
ecfdbz9o

ecfdbz9o7#

本节帮助我在jenkins容器中安装docker:https://www.jenkins.io/doc/book/installing/docker/#downloading-and-running-jenkins-in-docker
此外,我必须在步骤4(a)中将Dockerfile中的FROM jenkins/jenkins:2.303.1-lts-jdk11替换为jenkins/jenkins

2vuwiymt

2vuwiymt8#

我也遇到了同样的问题。在我的Jenkins服务器中找不到Docker。所以要解决这个问题,我们需要安装Docker沿着Jenkins Image。
工作代码:

1.Create one docker file named as "DockerfileJenkins"
2. Create docker-compose file for Jenkins Server.
3. Run the docker-compose file.

DockerfileJenkins

FROM jenkins/jenkins

USER root

# see https://docs.docker.com/compose/install/
RUN curl -L \
  "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose \
  && chmod +x /usr/local/bin/docker-compose

RUN curl -fsSL https://get.docker.com | sh

USER jenkins

停靠-合成

version: '2'
services:

  jenkins:
    build:
      context: .
      dockerfile: DockerfileJenkins
    hostname: jenkins
    container_name: jenkins
    restart: always
    privileged: true
    user: root
    ports:
      - 8083:8080
      - 50003:50000

    volumes:
      - ~/jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

相关问题