Jenkins流水线:找不到Docker

3

我想用Jenkins创建一个Docker镜像,但是提示找不到Docker。

在Windows上,我该如何将Jenkins添加到Docker组中?我尝试添加Docker插件,但没有成功。

这是我的流水线:

pipeline {
    agent any
    options { buildDiscarder(logRotator(numToKeepStr:'5'))}
    environment {DOCKERHUB_CREDENTIALS = credentials('tfkben-dockerhub')}
    stages {
            stage('build'){  steps {  sh 'docker build -t tfkben/ben:latest .' }  }
            stage('Login'){  steps {  sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin ' }}
            stage('Push'){  steps {  sh 'docker push tfkben/ben:latest'}   }                                 
         }                           
            post { always { sh 'docker logout' }}
}

我的Dockerfile:

FROM python:3.11-rc-bullseye

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "manage.py", "runserver", "0.0.0.0:8000"]

以下是错误消息:

  • docker build -t tfkben/ben:latest . /var/jenkins_home/workspace/dockerhub-auth_master@tmp/durable-d7adec4b/script.sh: 1: docker: 找不到命令

你好,能否添加你的 Dockerfile 文件?为什么要在 Windows 中管理 Jenkins 用户组?我不太明白,但你的错误似乎与你没有实现任何 Docker in Docker 解决方案有关。 - Joffrey K
@JoffreyK 我已经添加了我的 Dockerfile,针对 Windows 操作系统,这是 Jenkins 安装的操作系统。 - Toufik Benkhelifa
好的,你在Jenkins配置中添加了docker插件吗?如果你的机器上已经正确安装了docker,那么这个错误听起来像是Jenkins运行时找不到你的docker位置,请在构建阶段之前展示你的PATH路径,例如:echo ${env.PATH} - Joffrey K
@JoffreyK,docker run -p 8080:8080 -p 50000:50000 -d -v jenkins_home:/var/jenkins_home -v jenkins/jenkins:lts - Toufik Benkhelifa
所以你的 Jenkins 在容器中?我认为这是一个好的方式,但你需要挂载你的 docker.dock(我会发布一个答案)。 - Joffrey K
1个回答

6

如果您尝试在容器内运行Jenkins:

docker run -u 0 --privileged --name jenkins -d -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts

当然,如果您的主机不认识该命令,您可以直接替换$(which docker)为docker路径。
您应该能够在管道中运行docker命令。

该问题暗示了一个Windows主机,而$(which docker)在Linux容器中不是可运行的二进制文件。链接的问题讨论了如何构建包含可用二进制文件的自定义镜像。 - David Maze
@DavidMaze 好的,谢谢你的澄清。所以每次需要使用 Docker in Docker 时,您建议构建自己的镜像,并至少安装 Docker CLI吗? - Joffrey K
1
是的。通常情况下,一个镜像应该包含所有的源代码、库依赖和外部二进制依赖关系。在大多数情况下,您不应该使用绑定挂载来注入二进制文件或库。 - David Maze
@DavidMaze,那么Jenkins的容器解决方案是什么? - withoutOne
关于使用Docker Compose安装Jenkins呢? - D4ITON
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接