You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu22.04下Docker部署Jenkins DinD报GLIBC_2.32/2.34未找到错误

问题根因

该报错由GLIBC版本不匹配直接导致:

  • compose配置中直接将宿主机Ubuntu 22.04的/usr/bin/docker二进制文件挂载进Jenkins容器
  • 宿主机上的docker二进制针对GLIBC 2.35版本动态编译,运行时依赖GLIBC 2.32、2.34版本提供的符号
  • 使用的jenkins/jenkins:lts-jdk17镜像底层为Debian 11,内置GLIBC版本仅为2.31,无法满足该二进制的依赖要求
  • 更换不同JDK版本、alpine版本的Jenkins镜像无法解决问题:这类镜像的基础系统GLIBC版本均低于2.34,alpine镜像甚至使用musl libc而非glibc,依赖兼容性更差。
可行解决方案

方案1(推荐):在Jenkins镜像中内置匹配系统版本的Docker CLI

当前架构是用独立的dind容器运行Docker守护进程,Jenkins容器只需要Docker CLI客户端通过tcp://docker-in-docker-container:2375连接守护进程即可,完全不需要挂载宿主机的docker二进制。

  1. 首先删除原有compose配置中Jenkins服务下的错误挂载项:- /usr/bin/docker:/usr/bin/docker
  2. 新建自定义Jenkins镜像的Dockerfile,在Jenkins基础镜像中安装对应Debian系统版本的Docker CLI:
FROM jenkins/jenkins:lts-jdk17
USER root
# 安装Docker CE CLI
RUN apt-get update && apt-get install -y ca-certificates curl gnupg && \
    install -m 0755 -d /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
    chmod a+r /etc/apt/keyrings/docker.gpg && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
    apt-get update && apt-get install -y docker-ce-cli && \
    rm -rf /var/lib/apt/lists/*
USER jenkins
  1. 修改docker-compose.yaml,使用自定义构建的镜像,同时修正dind容器的存储挂载配置(避免dind运行数据和Jenkins数据混放引发权限问题),修正后的配置参考:
version: '3.3'

services:
  docker-in-docker-container:
    image: docker:dind
    container_name: docker-in-docker-container
    user: root
    privileged: true
    expose:
      - 2375
    volumes:
      - dind-storage:/var/lib/docker
    environment:
      DOCKER_TLS_CERTDIR: ""
    restart: on-failure

  jenkins-container: 
    build: ./jenkins  # 此处路径替换为存放上述Dockerfile的目录路径
    container_name: jenkins-container
    user: root
    depends_on:
      - docker-in-docker-container
    ports:
      - '8080:8080'
    volumes:
      - ./data:/var/jenkins_home
    environment:
      DOCKER_HOST: tcp://docker-in-docker-container:2375
    restart: on-failure

volumes:
  dind-storage:
  1. 执行docker-compose up -d --build重新构建并启动容器,进入Jenkins容器执行docker version,若能正常返回Client和Server(dind服务端)的版本信息,即配置修复完成,后续执行docker相关命令不会再出现GLIBC报错。

方案2(临时测试用):挂载dind容器内的Docker CLI

如果不想自定义构建镜像,可以直接将dind容器内的docker二进制挂载到Jenkins容器中,dind镜像内的CLI是和自身依赖库匹配的,可以直接连接dind守护进程。修改compose中Jenkins服务的volumes配置,删除原有宿主机docker挂载项后启动容器,执行以下命令将dind容器内的docker二进制复制到Jenkins数据目录:

docker cp docker-in-docker-container:/usr/local/bin/docker ./data/docker

再在Jenkins服务的volumes中增加挂载项- ./data/docker:/usr/bin/docker,重启容器即可。该方法稳定性弱于方案1,dind镜像升级后可能出现CLI和服务端版本差过大的问题。

注意事项

不要跨不同GLIBC版本的发行版直接挂载动态编译的二进制文件,这类操作必然会引发动态链接库依赖缺失的问题。如果需要在容器内使用某个命令,优先通过包管理器在容器内安装对应系统版本的编译包。

内容的提问来源于stack exchange,提问作者Izhar Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:33:26