Docker迁移及存储扩容遇到的问题
作者:惊鸿Randy
解决CentOS Docker存储不足问题,将数据目录迁移至/home分区,通过truncate处理日志、修改配置文件及同步数据恢复容器镜像,最终释放空间并确保数据目录路径正确
Docker迁移及存储扩容
1. 问题概述
在 CentOS 系统上,由于 /var/lib/docker 目录所在的 / 根分区空间有限,仅 50GB,导致 Docker 容器运行时存储受限。
希望将 Docker 数据目录迁移至 /home 分区,该分区有 5.4TB 可用空间。
2. 具体问题及解决措施
问题 1:删除日志后磁盘空间未释放
- 问题描述:手动删除
/var/lib/docker/containers/*-json.log日志文件后,df -h依然显示空间未释放。 - 原因分析:Docker 进程仍然持有已删除文件的引用,导致空间未立即释放。
- 解决措施:
重启 Docker 进程:
systemctl restart docker
使用 truncate 命令清空日志文件(避免直接删除):
truncate -s 0 /var/lib/docker/containers/*/*-json.log
问题 2:如何扩展 Docker 存储空间
- 问题描述:希望为 Docker 分配 500GB 以上存储空间,但
/var/lib/docker目录默认位于 50GB 根分区,空间受限。
解决措施:
在 /home 目录下创建新的 Docker 数据存储路径:
mkdir -p /home/docker
修改 Docker 配置文件 /etc/docker/daemon.json:
{
"data-root": "/home/docker"
}
停止 Docker 进程:
systemctl stop docker
同步 Docker 旧数据到新目录:
rsync -a /var/lib/docker/ /home/docker/
删除旧目录并创建符号链接:
rm -rf /var/lib/docker ln -s /home/docker /var/lib/docker
重启 Docker 服务:
systemctl start docker
问题 3:迁移后容器和镜像丢失
- 问题描述:迁移 Docker 数据目录后,执行
docker ps -a和docker images发现容器和镜像为空。
原因分析:
发现容器和镜像仍然存储在 /home/docker/docker 目录,而 daemon.json 配置的是 /home/docker,导致 Docker 读取错误路径。
解决措施:
修改 /etc/docker/daemon.json 配置:
{
"data-root": "/home/docker/docker"
}
重启 Docker 服务:
systemctl restart docker
确认容器和镜像恢复:
docker ps -a docker images
3. 最终结果
- 成功将 Docker 数据目录迁移至
/home/docker/docker,并释放了/var/lib/docker目录占用的 50GB 空间。 - 通过修改
daemon.json确保 Docker 读取正确的数据目录,容器和镜像恢复正常。 - 未来如果仍需扩容,可以进一步调整 LVM 或者挂载新的磁盘至
/home/docker以满足存储需求。
总结
本次 Docker 存储迁移主要遇到了以下关键点:
- 删除日志文件后仍占用空间 → 需要
truncate或者重启 Docker。 - 存储空间扩展 → 通过
/home目录存储 Docker 数据,避免 50GB 根分区限制。 - 迁移后容器和镜像丢失 → 需确保
data-root指向正确目录/home/docker/docker。
通过上述步骤,Docker 迁移及存储扩展问题已成功解决。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
