docker run运行镜像提示no such file or directory错误解决方法
问题场景
执行Docker镜像运行命令:docker run 7ce2964461cc
返回报错信息:
docker: Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/2900f69b23f22f96e520a3c8ec8681cb092c2e52bdfbb5e261ad130de1502df4-init/merged: no such file or directory.
报错原因
该报错属于Docker overlay2存储驱动挂载镜像层失败,核心原因是对应存储层的关联目录或元数据异常,常见触发场景:
- 宿主机异常断电、磁盘IO错误、磁盘空间占满,导致overlay2目录下的镜像层文件损坏、目录丢失
- 手动误删/var/lib/docker路径下的文件,或是Docker服务异常退出后,挂载元数据和实际磁盘状态不一致
- Docker数据目录所在的文件系统不兼容overlay2特性,或是内核overlay模块未正常加载
- 旧版本Docker的overlay2驱动存在已知bug,大版本升级后存储数据格式不兼容
修复操作
按从简单到复杂的顺序操作,每一步完成后都可以尝试重新运行镜像验证:
- 重载Docker服务,清理失效挂载
依次执行以下命令:systemctl stop docker umount /var/lib/docker/overlay2/*/merged 2>/dev/null systemctl start docker - 清理损坏的镜像层,重新导入镜像
如果第一步无效,先对本地构建的无备份镜像执行docker save 7ce2964461cc -o image_backup.tar做备份,再执行清理操作:
清理完成后重新拉取/导入目标镜像,再尝试运行。docker rmi 7ce2964461cc docker system prune -af - 检查存储驱动与底层环境兼容性
- 执行
lsmod | grep overlay确认内核overlay模块已加载,无输出则执行modprobe overlay手动加载 - 确认Docker数据目录(默认路径/var/lib/docker)所在分区使用ext4、xfs等原生支持overlay的文件系统,不要部署在NFS、FAT32等不兼容的文件系统上
- 检查
/etc/docker/daemon.json配置,确认storage-driver字段设置为overlay2,不要和其他存储驱动的历史数据混用
- 执行
- 全量重置Docker数据目录(大面积存储损坏时使用)
提前备份好所有需要留存的镜像、容器数据后,执行以下命令重置:
重置完成后重新导入镜像、恢复业务数据即可。systemctl stop docker mv /var/lib/docker /var/lib/docker.bak systemctl start docker
内容的提问来源于stack exchange,提问作者Mahdi Khezrabadi
相关产品推荐
相关产品推荐

