zl程序教程

您现在的位置是:首页 >  工具

当前栏目

docker 启动失败排查(loopback attach failed)

DockerFailed 启动 失败 排查 attach Loopback
2023-06-13 09:15:25 时间

某个清晨来到公司,突然发现MySQL,redis一直Connection TimedOut,打开Navicat连接MySQL连接不上,无法打开Portainer(docker可视化操作页面);远程连接服务器发现docker挂掉了,使用systemctl start docker无法启动,使用dockerd启动查看报错信息。

1、error initializing graphdriver: loopback attach failed(第一个错误信息)

错误信息:

ERRO[2022-04-20T10:46:43.988072049+08:00] Error opening loopback device: open /dev/loop0: no such device or address 
ERRO[2022-04-20T10:46:43.988117534+08:00] [graphdriver] prior storage driver devicemapper failed: loopback attach failed 
  • 通过百度查找到相关解决方案都是在 /dev 路劲下新建 loop$num等文件
  • 以上图修改存储驱动等方式解决无法解决上述错误;
  • 手动添加使用以下命令控制回路设备的回路模块后:
insmod /lib/modules/3.10.0-327.36.2.el7.x86_64/kernel/drivers/block/loop.ko
复制代码

/lib/modules/路径后根据你本机的内核版本进入对应内核版本文件夹即可。

2、 Error running deviceCreate (CreatePool) dm_task_run failed

错误信息:

[graphdriver] prior storage driver "devicemapper" failed: devicemapper: Error running deviceCreate (CreatePool) dm_task_run failed
复制代码
  • 可能是因为没有足够的空间磁盘(并不是):
  • 使用 dockerd -D –storage-driver=overlay指定存储驱动的方式来进行修复,没有用(试过了官网给出的所有选项)

3、解决方式:

官网[:](dockerd |Docker 文档)

再次翻看文档时发现:

  1. 查看内核版本:uname -sr发现版本3.*
  2. 升级内核:
#导入该源的秘钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#启用该源仓库
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#查看有哪些内核版本可供安装
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#版本选择
    #安装的长期稳定版本,稳定可靠
    yum --enablerepo=elrepo-kernel install kernel-lt -y 
    #安装的是主线版本,该版本比较激进,慎重选择
    yum --enablerepo=elrepo-kernel install kernel-ml -y
复制代码
  1. 设置 GRUB 默认的内核版本:
GRUB 初始化的第一个内核将作为默认内核,记得查看你想使用的内核排序
# vim /etc/default/grub 设置 GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
#这里的saved改为0即可,重启后,默认就是你上次所选的版本了。
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

命令行执行:grub2-mkconfig -o /boot/grub2/grub.cfg
复制代码
  1. 重启机器,再次使用 dockerd 启动docker测试是否可以正常启动;完美运行,停止使用systemctl start docker启动即可