
/var/lib/docker (Docker Engine 管理目录)此目录是 Docker 守护进程Docker Daemon的高层管理空间主要负责容器的生命周期管理、配置以及持久化存储。Containers (容器元数据与日志)存储容器的配置文件如config.v2.json、运行时状态以及容器的标准输出日志stdout/stderr通常为 JSON 格式。Volumes (卷数据)默认情况下用户创建的命名卷Named Volumes数据存储在volumes/子目录下。这是容器持久化数据的核心区域。Image Metadata (镜像元数据)存储镜像的清单Manifest、层级关系索引以及本地标签信息但不直接存储镜像的二进制文件系统层。Buildkit (构建缓存)存储使用 Docker BuildKit 构建镜像时产生的中间缓存数据。Network (网络配置)管理容器的虚拟网络如 Bridge, Overlay, Macvlan的配置及状态。2. /var/lib/containerd (Containerd 运行时目录)containerd是一个工业标准的容器运行时Container RuntimeDocker 目前将其作为底层的核心组件。该目录负责处理最底层的存储和执行逻辑。Content (镜像层内容)存储实际拉取回来的压缩镜像层文件Blobs。这是镜像数据物理存在的真正位置。Snapshotter (快照与文件系统)这是占用空间最大的部分如overlayfs。它负责将压缩的镜像层解压并叠加形成容器运行所需的根文件系统并管理每个容器的可写层Writable Layer。Metadata (元数据数据库)包含一个 BoltDB 或类似的数据库用于记录镜像内容、快照以及命名空间Namespaces之间的关联。IO Management管理容器进程的输入输出流。为什么要同时迁移这两个目录在早期的 Docker 版本中镜像存储直接位于/var/lib/docker/overlay2。但在现代架构中Docker 将底层存储和运行委派给了containerd分工明确/var/lib/docker负责上层的业务逻辑如卷管理、网络编排而/var/lib/containerd负责底层的大规模二进制文件存储。空间分布大部分的磁盘占用来自于containerd的镜像快照和层数据。仅迁移docker目录通常无法解决根分区爆满的问题。一致性通过软链接或挂载方式将两者同时迁移到数据盘可以确保容器环境的完整性并避免因路径不一致导致的启动失败或配置冲突。✨Linux 迁移 docker 目录目前许多 Nvidia 的 LLM 框架都会提供一个 NGC 镜像在使用 GPU 租赁平台使用 docker 时可能会遇到系统盘空间不足的情况此时需要迁移 docker 目录具体操作步骤如下停止 docker 服务sudo systemctl stop docker sudo systemctl stop docker.socket sudo systemctl stop containerd迁移数据使用rsync而不是mv因为rsync能够更好地保留文件权限和层级结构且万一中途出错原始数据还在。# 创建迁移目录 sudo mkdir -p /mnt/data/docker-data # 迁移 docker 目录 sudo rsync -avz /var/lib/docker/ /mnt/data/docker-data/docker/ # 迁移 containerd 目录 sudo rsync -avz /var/lib/containerd/ /mnt/data/docker-data/containerd/清理原目录并建立软链接sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo ln -s /mnt/data/docker-data/docker /var/lib/docker sudo ln -s /mnt/data/docker-data/containerd /var/lib/containerd验证软链接状态ls -ld /var/lib/docker /var/lib/containerd预期输出你会看到类似下方的结果注意行首的l代表 link以及末尾的箭号-lrwxrwxrwx 1 root root 26 Apr 9 14:30 /var/lib/containerd - /mnt/data/docker-data/containerd lrwxrwxrwx 1 root root 22 Apr 9 14:30 /var/lib/docker - /mnt/data/docker-data/docker恢复 docker 服务sudo systemctl start docker sudo systemctl start containerd