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 软件包崩坏/有问题?
奇葩的问题,摸不着头脑的处理结果

posted @ 2025-04-23 09:18  cumybride  阅读(82)  评论(0)    收藏  举报