docker: /lib64/libc.so.6: version `GLIBC_2.32‘ not found (required by docker)

Linux环境 Ubuntu 22.04
docker 最新版
jenkins docker 版本(以下版本都会报错

jenkins/jenkins:centos7
jenkins/jenkins:lts-centos7
jenkins/jenkins:lts

docker-compose.yml配置

version: '3.6'
services:
  gitlab:
    image: twang2218/gitlab-ce-zh
    restart: always
    container_name: gitlab
    hostname: '192.168.2.128'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.2.128'
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
#         需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
#         比如下面的电子邮件的配置:
#         gitlab_rails['smtp_enable'] = true
#         gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
#         gitlab_rails['smtp_port'] = 465
#         gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
#         gitlab_rails['smtp_password'] = "password"
#         gitlab_rails['smtp_authentication'] = "login"
#         gitlab_rails['smtp_enable_starttls_auto'] = true
#         gitlab_rails['smtp_tls'] = true
#         gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
    ports:
      - '80:80'
      - '443:443'
      - '2222:22'
    volumes:
      - ./gitlab/config:/etc/gitlab
      - ./gitlab/data:/var/opt/gitlab
      - ./gitlab/logs:/var/log/gitlab
    networks:
      - CI/CD
  jenkins:
    image: jenkins/jenkins:lts  #镜像名称
    container_name: jenkins    #指定容器名
    restart: always    #在容器退出时总是重启容器
    user: root    #指定用户
    ports: #容器的端口映射到宿主机上(“:”前数字为宿主机端口,“:”后数字为容器端口)
      - "8080:8080"    #自定义宿主机端口8080
      - "5000:5000"
    environment:
      TZ: Asia/Shanghai    #指定容器运行所属时区
    volumes:
      - ./jenkins/jenkins_home:/var/jenkins_home
      - ./jenkins/home:/home    #将容器的/home目录映射到宿主机上目录中的/data/jenkins/home子目录
      - /etc/localtime:/etc/localtime
      - /var/run/docker.sock:/var/run/docker.sock    #Docker守护进程(Docker daemon)默认监听的Unix域套接字(Unix domain socket),容器中的进程可以通过它与Docker守护进程进行通信。简单来说容器使用宿主机docker命令
      - /usr/libexec/docker/cli-plugins/docker-compose:/usr/local/bin/docker-compose
      - /usr/bin/docker:/usr/bin/docker
#      - /lib/x86_64-linux-gnu/libc.so.6:/lib/x86_64-linux-gnu/libc.so.6
    networks:
      - CI/CD
networks:
  CI/CD:
    driver: bridge

报错信息

18:38:38 $ docker-compose -f /var/jenkins_home/workspace/test-springboot/docker-compose.yml up -d
18:38:38 Building test-java
18:38:38 docker: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by docker)
18:38:38 docker: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by docker)
18:38:38 Service 'test-java' failed to build : Build failed
18:38:38 Build step 'Docker Compose Build Step' changed build result to FAILURE
18:38:38 ERROR: Failed to parse POMs
18:38:38 java.io.EOFException: unexpected stream termination
18:38:38 	at hudson.remoting.ChannelBuilder.negotiate(ChannelBuilder.java:459)
18:38:38 	at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:404)
18:38:38 	at hudson.slaves.Channels.forProcess(Channels.java:121)
18:38:38 	at hudson.maven.AbstractMavenProcessFactory.newProcess(AbstractMavenProcessFactory.java:298)
18:38:38 	at hudson.maven.ProcessCache.get(ProcessCache.java:237)
18:38:38 	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:802)
18:38:38 	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:526)
18:38:38 	at hudson.model.Run.execute(Run.java:1895)
18:38:38 	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
18:38:38 	at hudson.model.ResourceController.execute(ResourceController.java:101)
18:38:38 	at hudson.model.Executor.run(Executor.java:442)
18:38:38 Finished: FAILURE

解决方法:

替换 jenkins  docker版本

改为 jenkins/jenkins:jdk11

原因

可能是因为报错的底层镜像用的都是centos,与ubuntu22.04不兼容,
在这里插入图片描述

ubuntu22.04应该使用jenkins/jenkins:jdk11 ,他的From镜像是eclipse-temurin:“${JAVA_VERSION}”-jdk-focal,
在这里插入图片描述

然后在上级的From镜像应该是ubuntu:20.04,所有才能兼容使用
在这里插入图片描述

代码示例

https://gitee.com/xiaoyun461/git-lab-docker.git
<think>好的,我需要帮助用户解决MongoDB因缺少GLIBC_2.18和GLIBC_2.25导致的运行问题。首先,我得回忆一下GLIBC的相关知识。GLIBC是GNU C库,系统上很多程序依赖它。如果版本不够,就会出现类似错误。用户提到mongod需要这两个版本,而系统当前可能没有安装或版本过低。 首先,应该检查当前系统的GLIBC版本。常用的方法是用命令`ldd --version`或者检查libc.so.6的符号链接。不过根据引用中的内容,用户可能已经通过类似`strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_`的方式检查过,发现缺少所需的版本。 接下来,用户可能需要升级GLIBC。但升级GLIBC有一定风险,因为它属于系统核心组件,不当操作可能导致系统不稳定。根据引用[2]和[4],解决方案通常涉及下载GLIBC源码编译安装。引用[2]提到解压glibc-2.25.tar.gz,并进入目录进行编译。但需要注意编译时的配置选项,比如指定安装路径到非系统目录,避免覆盖系统原有的GLIBC,这可能导致系统崩溃。例如,可以创建glibc_build目录,配置时使用--prefix参数指定安装路径,如`../configure --prefix=/opt/glibc-2.25`,然后进行编译安装。 不过用户同时需要GLIBC_2.18和2.25,可能需要分别安装这两个版本。或者,更高版本的GLIBC可能已经包含之前版本的符号,所以安装较新的版本可能同时解决多个问题。需要确认的是,安装GLIBC-2.25是否能覆盖2.18的需求。如果不行,可能需要单独安装2.18,但这样可能会有冲突,需要谨慎处理。 另一种方法是使用静态链接的MongoDB版本,或者通过容器化技术(如Docker)来运行MongoDB,这样容器内可以包含所需的GLIBC版本,而无需修改宿主机系统。这可能更安全,但用户可能需要安装Docker并学习基本使用方法。 另外,引用[4]提到解决libstdc++.so.6的问题,可能与libc的版本有关联。可能需要同时更新libstdc++,但这通常是通过升级GCC或安装更新的libstdc++6包来实现的。但不同的Linux发行版有不同的包管理方式,用户可能需要根据他们的系统(如CentOS、Ubuntu等)选择合适的方法。 还需要注意,手动编译GLIBC后,可能需要设置环境变量LD_LIBRARY_PATH指向新安装的库路径,以便mongod能够找到它们。例如,在启动mongod前执行`export LD_LIBRARY_PATH=/opt/glibc-2.25/lib:$LD_LIBRARY_PATH`。但这种方法可能存在兼容性问题,尤其是当其他系统程序依赖原有GLIBC时。 总结可能的解决步骤:1)检查当前GLIBC版本;2)下载所需版本的GLIBC源码;3)编译安装到非系统目录;4)配置环境变量或使用patchelf工具修改mongod的库依赖路径;5)测试运行。或者,使用容器化方法避免系统修改。 同时,需要提醒用户操作风险,建议备份重要数据,并在测试环境中先行尝试。如果用户不熟悉系统编译,推荐使用Docker方式更为安全可靠。</think>### 解决MongoDB因缺少GLIBC_2.18和GLIBC_2.25的运行问题 #### 1. 确认当前系统GLIBC版本 运行以下命令查看已安装的GLIBC版本: ```bash strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ ``` 若输出中缺少`GLIBC_2.18`或`GLIBC_2.25`,则需要手动升级GLIBC[^3]。 --- #### 2. 编译安装GLIBC_2.18和GLIBC_2.25 **步骤说明**(需root权限): 1. **下载源码包**: ```bash wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-2.25.tar.gz ``` 2. **解压并编译安装**(以GLIBC_2.25为例): ```bash tar zxvf glibc-2.25.tar.gz cd glibc-2.25 mkdir glibc_build && cd glibc_build ../configure --prefix=/opt/glibc-2.25 # 指定安装路径,避免覆盖系统默认库 make -j4 && make install ``` *重复类似步骤编译GLIBC_2.18*[^2]。 3. **验证安装**: ```bash /opt/glibc-2.25/lib/libc.so.6 # 查看新安装的GLIBC版本 ``` --- #### 3. 配置MongoDB使用新GLIBC **方法一:通过环境变量指定库路径** 启动`mongod`时强制使用新版本库: ```bash export LD_LIBRARY_PATH=/opt/glibc-2.25/lib:/opt/glibc-2.18/lib:$LD_LIBRARY_PATH mongod --dbpath /your/data/directory ``` **方法二:修改二进制文件依赖(高风险)** 使用`patchelf`工具修改`mongod`的库链接路径: ```bash patchelf --set-rpath /opt/glibc-2.25/lib:/opt/glibc-2.18/lib /usr/bin/mongod ``` *此操作可能破坏程序兼容性,需谨慎*[^4]。 --- #### 4. 替代方案:使用Docker容器(推荐) 若担心系统稳定性,可通过Docker运行MongoDB: ```bash docker pull mongo:latest docker run --name mymongo -p 27017:27017 -v /mongo/data:/data/db -d mongo ``` 此方法无需修改宿主机GLIBC版本[^1]。 --- #### 注意事项 - **系统兼容性**:手动升级GLIBC可能导致其他程序崩溃,建议在测试环境操作。 - **备份数据**:操作前备份MongoDB数据目录。 - **依赖冲突**:若同时需要多个GLIBC版本,优先尝试安装更高版本(如2.25可能包含2.18的符号)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值