首页 > 基础资料 博客日记

【Docker】Linux 迁移 docker 目录(软链接)

2026-04-09 15:00:02基础资料围观1

这篇文章介绍了【Docker】Linux 迁移 docker 目录(软链接),分享给大家做个参考,收藏极客资料网收获更多编程知识

✨Docker 目录介绍

在现代的容器化架构中,Docker 已经从一个单一的工具演变为一个多层级的架构。在 Linux 系统中,其核心数据分布在以下两个主要目录中:

1. /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 Runtime),Docker 目前将其作为底层的核心组件。该目录负责处理最底层的存储和执行逻辑。

  • Content (镜像层内容):存储实际拉取回来的压缩镜像层文件(Blobs)。这是镜像数据物理存在的真正位置。
  • Snapshotter (快照与文件系统):这是占用空间最大的部分(如 overlayfs)。它负责将压缩的镜像层解压并叠加,形成容器运行所需的根文件系统,并管理每个容器的可写层(Writable Layer)。
  • Metadata (元数据数据库):包含一个 BoltDB 或类似的数据库,用于记录镜像内容、快照以及命名空间(Namespaces)之间的关联。
  • IO Management:管理容器进程的输入输出流。

为什么要同时迁移这两个目录?

在早期的 Docker 版本中,镜像存储直接位于 /var/lib/docker/overlay2。但在现代架构中,Docker 将底层存储和运行委派给了 containerd

  1. 分工明确/var/lib/docker 负责上层的业务逻辑(如卷管理、网络编排),而 /var/lib/containerd 负责底层的大规模二进制文件存储。
  2. 空间分布:大部分的磁盘占用来自于 containerd 的镜像快照和层数据。仅迁移 docker 目录通常无法解决根分区爆满的问题。
  3. 一致性:通过软链接或挂载方式将两者同时迁移到数据盘,可以确保容器环境的完整性,并避免因路径不一致导致的启动失败或配置冲突。

✨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

⭐转载请注明出处

本文作者:双份浓缩馥芮白

原文链接:https://www.cnblogs.com/Flat-White/p/19840978

版权所有,如需转载请注明出处。


文章来源:https://www.cnblogs.com/Flat-White/p/19840978
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云