You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker丢失容器但/var/lib/docker数据存在,如何让其正确读取?

Docker容器“丢失”但数据目录完整的解决方案

问题描述

Docker容器突然全部无法被docker container ls检测到,输出为空列表,但/var/lib/docker/containers及上级目录的容器数据完整保留,此前运行正常,仅一夜之间出现该问题。

环境信息

  • 操作系统: Kali GNU/Linux Rolling
  • 内核版本: 5.19.0-kali2-amd64
  • Docker客户端版本: 19.03.15
  • Docker守护进程版本: 20.10.19+dfsg1

已尝试操作

  • 重启Docker守护进程,无效果
  • 备份并恢复/var/lib/docker目录,无效
  • 在/etc/docker/daemon.json中显式设置data-root为/var/lib/docker并重启守护进程,未解决问题
  • 重新安装docker-ce,无变化
  • 重启系统,问题依旧

排查与解决步骤

1. 修复客户端与守护进程版本不兼容问题

你的Docker客户端(19.03.15)和守护进程(20.10.19)跨了多个大版本,存在兼容性冲突,这可能是容器元数据无法被正常读取的核心原因。统一版本步骤:

# 卸载现有Docker组件
sudo apt-get purge docker-ce docker-ce-cli containerd.io
# 安装与守护进程匹配的20.10.x版本
sudo apt-get install docker-ce=5:20.10.19~3-0~kali-gnu docker-ce-cli=5:20.10.19~3-0~kali-gnu containerd.io
# 重启Docker服务
sudo systemctl restart docker

2. 确认存储驱动一致性

检查Docker守护进程使用的存储驱动,与/var/lib/docker下的实际存储目录是否匹配:

# 查看当前存储驱动
docker info | grep "Storage Driver"
# 检查/var/lib/docker下的存储驱动目录
ls -la /var/lib/docker/

如果输出的存储驱动(如overlay2)不存在于/var/lib/docker目录中,需在/etc/docker/daemon.json中指定正确的存储驱动:

{
  "storage-driver": "overlay2"
}

修改后重启Docker:

sudo systemctl restart docker

3. 手动恢复容器元数据

若上述步骤无效,可尝试手动导入容器元数据:

  1. 停止Docker服务:
sudo systemctl stop docker
  1. 遍历/var/lib/docker/containers下的容器ID目录,提取每个容器的config.v2.json中的镜像ID:
# 示例:提取某容器的镜像ID
cat /var/lib/docker/containers/[容器ID]/config.v2.json | grep -o '"Image":"sha256:[a-f0-9]*"' | cut -d '"' -f4
  1. 使用提取的镜像ID和原容器配置重新创建容器,同时挂载原数据卷(需从hostconfig.json中提取挂载路径信息):
docker run -d --name [原容器名] -v [原宿主机路径]:[容器内挂载路径] [镜像ID]

4. 修复目录权限问题

检查/var/lib/docker目录的权限,确保为root:root且权限位为700:

sudo chown -R root:root /var/lib/docker
sudo chmod -R 700 /var/lib/docker

修复后重启Docker服务。

内容的提问来源于stack exchange,提问作者user12512444

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:43:24