Docker存储目录迁移指南

Docker存储目录迁移指南

概述

Docker的默认存储目录(通常是/var/lib/docker)占满磁盘空间时,可以通过修改配置将其迁移到另一个有更大空间的目录。本文档提供了详细的操作步骤和注意事项。

核心原理

停止Docker服务 → 将旧数据完整复制到新位置 → 修改Docker配置文件指向新路径 → 重启服务

迁移前准备

1. 权限要求

● 

需要root权限或sudo权限

● 

确保目标磁盘有足够的空间容纳所有Docker数据

2. 停止Docker服务

代码

sudo systemctl stop docker

sudo systemctl stop docker.socket

重要提示: 必须确保在数据迁移过程中没有任何容器在运行,以防止数据损坏或不一致。

详细操作步骤

步骤1:创建新的存储目录

选择一个空间充足的路径作为新的Docker数据存储根目录:

代码

sudo mkdir -p /data/docker-data

步骤2:复制原有数据

使用rsync命令将旧目录下的所有数据安全地复制到新目录:

代码

sudo rsync -aAXHv --progress /var/lib/docker/ /data/docker-data/

参数说明:

● 

-a: 归档模式,保留权限、符号链接等

● 

-A: 保留ACL属性

● 

-X: 保留扩展属性

● 

-H: 保留硬链接

● 

-v: 显示详细过程

● 

--progress: 显示复制进度

步骤3:修改Docker配置文件

编辑Docker的守护进程配置文件:

代码

sudo nano /etc/docker/daemon.json

添加或修改data-root字段:

代码

{  "data-root": "/data/docker-data"}

注意: 如果文件中已有其他配置项,请确保用逗号正确分隔,保持JSON格式的有效性。

步骤4:重启Docker服务

代码

sudo systemctl daemon-reload

sudo systemctl start docker

验证迁移结果

1. 检查Docker根目录

代码

sudo docker info | grep "Docker Root Dir"

预期输出:

代码

Docker Root Dir: /data/docker-data

2. 检查镜像和容器

代码

sudo docker images

sudo docker ps -a

确认列表中的内容与迁移前一致。

清理旧数据

在确认Docker在新目录下运行完全正常后,可以删除旧的/var/lib/docker目录:

代码

# 先重命名为备份sudo mv /var/lib/docker /var/lib/docker.bak

# 观察几天,确认一切无误后删除备份sudo rm -rf /var/lib/docker.bak

重要注意事项

必须停止服务

迁移前必须停止Docker服务,否则会导致数据不一致或损坏。

使用rsync

避免使用cp -r,因为它可能无法正确处理硬链接等特殊文件,导致镜像层校验失败。

SELinux/AppArmor

如果系统启用了SELinux,可能需要为新目录设置正确的安全上下文:

代码

sudo restorecon -R /data/docker-data

权限问题

确保Docker用户(通常是root)对新目录有完全的读写权限。

Docker Desktop

此方法适用于Linux服务器上的Docker Engine。Docker Desktop (Windows/macOS)需要在图形界面中进行设置。

常见问题解答

Q1: 迁移过程中可以访问Docker吗?

A1: 不可以。迁移期间Docker服务必须完全停止。

Q2: 迁移需要多长时间?

A2: 取决于原有Docker数据的大小和磁盘IO性能,建议在业务低峰期进行操作。

Q3: 迁移后容器ID会改变吗?

A3: 不会。容器的ID和配置信息都会完整保留。

总结

通过本文档介绍的方法,您可以安全地将Docker存储目录迁移到新的位置,解决磁盘空间不足的问题。请严格按照操作步骤执行,并在生产环境操作前在测试环境进行验证。

 

 

posted @ 2026-05-06 16:33  areshuang  阅读(3)  评论(0)    收藏  举报