Docker迁移及存储扩容遇到的问题

 更新时间:2025年09月28日 08:43:56   作者:惊鸿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 -adocker 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 存储迁移主要遇到了以下关键点:

  1. 删除日志文件后仍占用空间 → 需要 truncate 或者重启 Docker。
  2. 存储空间扩展 → 通过 /home 目录存储 Docker 数据,避免 50GB 根分区限制。
  3. 迁移后容器和镜像丢失 → 需确保 data-root 指向正确目录 /home/docker/docker

通过上述步骤,Docker 迁移及存储扩展问题已成功解决。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker部署nginx下日志自动切割方法实现

    docker部署nginx下日志自动切割方法实现

    部署Nginx在Docker中时,其日志文件默认不会自动切割,与非Docker环境有所不同,本文介绍了三种日志切割方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Centos-docker文件迁移的解决办法

    Centos-docker文件迁移的解决办法

    Docker镜像默认存放在系统的根目录下,可能会导致根目录空间不足或其他风险,为了避免这些问题,可以将Docker镜像的存储位置更改到其他磁盘,本文介绍Centos-docker文件迁移的解决办法,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • docker-registry使用笔记

    docker-registry使用笔记

    在国内docker-hub是肯定用不了的,不解释:所以最好还是建一个私有的docker-registry,存储一些常用的images方便随时pull
    2016-09-09
  • Docker镜像创建的方法

    Docker镜像创建的方法

    本文给大家汇总介绍了docker中镜像创建的几种方法,包括基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。有需要的小伙伴可以参考下
    2018-08-08
  • docker volume删除卷的操作

    docker volume删除卷的操作

    这篇文章主要介绍了docker volume删除卷的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用Docker安装Jenkins的示例代码

    使用Docker安装Jenkins的示例代码

    这篇文章主要介绍了使用Docker安装Jenkins的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Docker中如何删除image(镜像)的方法

    Docker中如何删除image(镜像)的方法

    这篇文章主要介绍了Docker中如何删除image(镜像)的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • docker安装seafile企业云盘方式

    docker安装seafile企业云盘方式

    本文详细介绍了如何在Docker中安装和配置Seafile,包括基础安装、生产环境配置、HTTPS设置、数据备份与恢复以及常见问题解决,通过这些步骤,您可以快速部署一个稳定且安全的Seafile实例
    2025-02-02
  • Docker部署Golang服务的实现步骤

    Docker部署Golang服务的实现步骤

    不管是开发还是生产环境,通过docker方式部署服务都是一种不错的选择,本文主要介绍了Docker部署Golang服务的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • mac如何用docker跑sql server

    mac如何用docker跑sql server

    这篇文章主要介绍了mac如何用docker跑sql server的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06

最新评论