使用 Docker Jenkins 容器管道构建 docker 镜像时找不到 Docker

问题描述 投票:0回答:9

我有一个 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

docker jenkins dockerfile jenkins-pipeline
9个回答
26
投票

您缺少 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

来源


22
投票

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

然后向下滚动到 Docker Installations 并单击 “Add Docker”。给它起一个名字,比如 “myDocker”

确保选中“自动安装”框。单击 “添加安装程序” 并选择 “从 docker.com 下载”。在 Docker 版本中保留“最新”。确保单击“保存”。

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

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



14
投票
编辑:2018年5月

正如

Guillaume Husta

所指出的,这篇 jpetazzo 的博客文章 不鼓励这种技术:

本文的前版本建议将 docker 二进制文件从主机传输到容器。这不再可靠,因为 Docker 引擎不再作为(几乎)静态库分发。

Docker 客户端应安装在容器内,如
此处

所述。另外,
bind-mount

用户应该在jenkins组中,因此执行以下操作:


docker

最后重新启动

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

原答案:

您可以使用主持人的my-jenkins,就像在这个

@Adrian Mouat

博客

文章
中一样。 docker engine 这避免了主机和 jenkins 容器上有多个 docker 引擎版本。


问题出在你的 Jenkins 中,即使你从插件管理器安装了 docker,它也无法使用 docker 引擎。根据我的研究,有一些替代方案可以解决这个问题:


8
投票
1:

使用一些 docker 镜像构建一个镜像,其中预装了 docker,如

getintodevops/jenkins-withdocker:lts

提供的 2:从jenkins/jenkins构建图像,将卷安装到主机,然后通过创建另一个具有相同卷的容器并执行bash cmd来安装docker或使用

Robert

建议自行安装docker docker run -d \ --name my-jenkins \ -v /var/jenkins_home:~/.jenkins \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 8080:8080 jenkins

或3:
最简单,只需添加主机上安装的docker路径以供jenkins容器使用:
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

你的 docker 命令应该如下所示:


-v $(which docker):/usr/bin/docker

[来源]

https://forums.docker.com/t/docker-not-found-in-jenkins-pipeline/31683


额外选项:如果您只想使用单个 Jenkis 服务器,则毫无意义,但始终可以使用映像安装 Ubuntu 等操作系统并从那里安装 jenkins .war 文件

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


2
投票
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
 

本节帮助我在 jenkins 容器内安装 docker:

https://www.jenkins.io/doc/book/installing/docker/#downloading-and-running-jenkins-in-docker


0
投票
这样的卷中的容器中

-v $(which docker):/usr/bin/docker

    

我也有同样的问题。在我的 Jenkins 服务器中找不到 Docker。因此,为了解决这个问题,我们需要安装 docker 和 Jenkins Image。

0
投票

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

DockerfileJenkins

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

docker-compose

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

如果您使用 docker-compose 文件来启动 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

0
投票

示例:

- /usr/bin/docker:/usr/bin/docker

© www.soinside.com 2019 - 2024. All rights reserved.