Docker运行库异常解决
Docker运行库异常处理记录
问题说明:docker运行状态正常:Running,但使用docker命令时报错:
Inconsistency detected by ld.so: ../sysdeps/x86_64/dl-machine.h: 538: elf_machine_rela_relative: Assertion `ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE' failed!
解决方案:
#先说处理方案:先卸载docker,再安装docker
yum remove docker-ce docker-ce-cli
yum install docker-ce docker-ce-cli
# 启动docker,发现docker命令正常
systemctl start docker
docker ps
处理记录
前两天还docker ps看过,正常的,当天来执行docker ps却突然报错
[root@infra01 ~]# docker ps
报错:Inconsistency detected by ld.so: ../sysdeps/x86_64/dl-machine.h: 538: elf_machine_rela_relative: Assertion `ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE' failed!
看到ld.so,查了一下猜测是系统库不兼容的问题
[root@infra01 ~]# ldd --version
ldd (GNU libc) 2.29
发现是 glibc版本是2.29,又查了下其他centos7系统,发现默认的glibc版本是ldd (GNU libc) 2.17
猜测是 glibc 被人动过,确认一下
[root@infra01 ~]# rpm -qa | grep glibc
glibc-common-2.17-326.el7_9.x86_64
glibc-headers-2.17-326.el7_9.x86_64
glibc-2.17-326.el7_9.x86_64
glibc-devel-2.17-326.el7_9.x86_64
[root@infra01 ~]# rpm -q --info glibc
Name : glibc
Version : 2.17
Release : 326.el7_9
Architecture: x86_64
Install Date: 2022年12月14日 星期三 18时49分18秒
发现 glibc 的rpm包是 2.17,也就是默认的,但又查了一下发现他rpm包最高就到2.17(在centos的yum源),也就是唯一从 2.17升级到2.29的方式应该是 编译安装,但find并没有找到源码包
# 直接用stat查看libc情况
[root@infra01 ~]# stat /usr/lib64/libc.so.6
文件:"/usr/lib64/libc.so.6" -> "libc-2.29.so"
大小:12 块:0 IO 块:4096 符号链接
设备:fd00h/64768d Inode:8760 硬链接:1
权限:(0777/lrwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2025-02-28 09:21:18.076746039 +0800
最近更改:2022-12-14 20:08:29.154206698 +0800
最近改动:2022-12-14 20:08:29.154206698 +0800
创建时间:-
发现glibc的rpm安装时间是 2022-12-14 18:19:18,而glibc 2.29升级时间似乎是2022-12-14 20:08:29,也就是同一天,那就应该不是 系统库 的问题
日志相关排查
# 查看系统日志,看看有没有线索,发现有关ld.so的相同报错
Feb 27 16:58:20 mail rc.local: Inconsistency detected by ld.so: ../sysdeps/x86_64/dl-machine.h: 538: elf_machine_rela_relative: Assertion `ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE' failed!
# rc.local?为什么rc.local也会报这个错?
# 查了下 系统 开机自启动脚本: cat /etc/rc.d/rc.local
docker start 901c78fc36b8
# 发现只是rc.local写进了 docker 命令而已,所以还是docker自身的问题
# 事到如今,只能重启大法了
systemctl restart docker
docker ps
发现仍报错,看来docker犯病不轻
查了下资料,可能是系统与docker的glibc/库不匹配可能导致动态链接器(ld.so)无法正确处理二进制文件,从而引发 elf_machine_rela_relative 错误
但是glibc升级/降级太危险,所以想从docker版本上动手,或许能让docker去匹配新的glibc?
docker --version
# 发现查不了,哦忘了用不了docker命令
rpm -qa | grep docker
docker-ce-20.10.18-3.el7.x86_64
docker-ce-cli-20.10.18-3.el7.x86_64
#发现是20.10,直接重新配yum源
yum update docker-ce
# 直接升级到 26.1
docker ps
# 仍然报错:Inconsistency detected by ld.so: ../sysdeps/x86_64/dl-machine.h: 538: elf_machine_rela_relative: Assertion `ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE' failed!
想起 yum update 会保留现有配置和数据,尝试将docker删除后再安装
yum remove docker-ce docker-ce-cli
yum install docker-ce docker-ce-cli
systemctl start docker && systemctl enable docker
# 再次执行docker命令
[root@infra01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
901c78fc36b8 nacos/nacos-server:v2.2.0 "bin/docker-startup.…" 11 months ago Up 16 seconds nacos-server:v2.2.0
9733b685532a zookeeper:3.5 "/docker-entrypoint.…" 1 years ago Up 16 seconds zk:3.5
终于正常了,看起来是 docker 软件包崩坏/有问题?
奇葩的问题,摸不着头脑的处理结果

浙公网安备 33010602011771号