Kubernetes 环境下迁移 Docker 数据目录教程


一、操作背景

默认情况下,Docker 的数据目录位于:

/var/lib/docker

随着容器数量增多,该目录可能会占满系统盘。为了优化磁盘空间,可以将其迁移到新的磁盘路径(如 /home/docker/data/docker)。


二、迁移目标

示例目标路径:

/home/docker

三、迁移步骤


1. 停止 Kubernetes 和 Docker 服务

首先停止依赖 Docker 的服务,防止迁移过程中文件被占用。

sudo systemctl stop kubelet
sudo systemctl stop docker
sudo systemctl stop containerd

查看 Docker 状态,确认已停止:

sudo systemctl status docker

2. 创建新的 Docker 存储目录

sudo mkdir -p /home/docker

3. 同步旧数据到新目录

使用 rsync 命令同步文件,保持权限与软链接信息完整。

sudo rsync -aP /var/lib/docker/ /home/docker/

参数说明:

  • -a:保留文件权限、时间、链接等信息;
  • -P:显示同步进度。

4. 修改 Docker 配置文件

编辑 /etc/docker/daemon.json

sudo vim /etc/docker/daemon.json

修改或新增如下内容:

{
  "data-root": "/home/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://docker.1ms.run"],
  "insecure-registries": ["192.168.31.217:5000"]
}

⚠️ 注意:

  • "data-root" 为新的 Docker 存储路径(可根据实际目录修改,如 /home/docker)。
  • "insecure-registries" 用于配置私有仓库地址。

5. 重新加载并启动服务

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl start containerd
sudo systemctl start kubelet

要注意顺序不能乱


6. 验证迁移结果

检查节点状态:

kubectl get nodes

查看 Docker 实际数据目录:

docker info | grep "Docker Root Dir"

若输出结果为:

Docker Root Dir: /data/docker

说明迁移已生效。

在这里插入图片描述


7. 清理旧目录(确认无误后)

确认服务正常运行后,可删除旧的 Docker 目录释放空间:

sudo rm -rf /var/lib/docker

四、总结

操作阶段主要命令说明
停止服务systemctl stop kubelet docker containerd防止文件占用
同步数据rsync -aP /var/lib/docker/ /home/docker/保留权限与链接
修改配置/etc/docker/daemon.json更新存储路径
启动服务systemctl start docker kubelet恢复运行
验证迁移docker infokubectl get nodes检查配置是否生效

更多推荐