詹金斯:无法连接到 Docker 守护进程

jenkins : Cannot connect to the Docker daemo

我想用 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' }}

} 我的 Docker 文件:

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"]
and this is the error message :

这可能是因为您的 Jenkins 代理中没有 Docker 守护进程 运行。

如果代理本身是 运行 作为 Docker 容器,那么您需要确保它使用具有“Docker-in-Docker” (dind)

@Toufik Benkhelifa 您的 jenkins 代理中似乎没有安装 docker。您的 Jenkins 代理住在哪里?这里有几种可能性。

  1. 如果您使用任何 Linux 发行版 OS(Ubuntu、Redhat、centos 等)作为 Jenkins 代理,那么您可以在其中显式安装 docker 守护程序经纪人。

参考:https://docs.docker.com/engine/install/

  1. 如果您运行将代理作为 docker 容器,那么您可以执行类似于下面的操作

假设您有 Jenkins master 和 Jenkins agent 运行ning 作为 docker 节点。

其中,

  • Jenkins Master 实际上 运行 在 Docker 中作为 Docker 容器
  • Jenkins Agent 运行在 Docker 中作为 Docker 容器
  • 现在 Jenkins Master 正在通过 tcp://host.docker.internal:2375
  • 中的 Docker Demon 与主机 Docker 通信
  • 一旦 Jenkins Master 与 Docker Demon 连接,它就可以通过 Demon 与 运行ing 在 Docker 主机内的任何容器安全通信,因为它将拥有所有与不同容器通信的网络信息,在本例中它将是一个 Docker 容器 运行ning Jenkins 代理。

现在,Link Jenkins 掌握 Docker 主机守护进程。为此,您需要使用“Docker Jenkins 插件”https://plugins.jenkins.io/docker-plugin/

此 docker 插件的目的是能够使用 Docker 主机动态提供 docker 容器作为 Jenkins 代理节点,让 运行 单个构建,然后 tear-down 该节点,构建过程(或 Jenkins 作业定义)不需要任何对 docker 的感知。

安装插件后,我们需要做的就是配置 Jenkins 添加新云,从 Jenkins -> 管理 -> 系统配置并添加新云 'Docker'

最后,如前所述,Docker恶魔将在运行上

tcp://host.docker.internal:2375

这需要是 Docker 主机 URI

参考:https://blog.executeautomation.com/running-jenkins-build-agent-within-docker-container-part-a/