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覆盖镜像默认命令之docker entrypoint详解

    docker覆盖镜像默认命令之docker entrypoint详解

    entrypoint命令就是覆盖ENTRYPOINT命令的,本文给大家介绍了docker覆盖镜像默认命令之docker entrypoint的相关知识,需要的朋友可以参考下
    2023-10-10
  • docker compose安装es+kibana 8.12.2的详细过程

    docker compose安装es+kibana 8.12.2的详细过程

    因云平台需要改造,es7升级为es8,所以记录一下,es8需要开启ssl认证,需要配置证书,全本带你用docker安装,便于后面es8的学习,这篇文章主要介绍了docker compose安装es+kibana 8.12.2的详细过程,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Docker 修改存储位置的步骤(data-root 迁移完整指南)

    Docker 修改存储位置的步骤(data-root 迁移完整指南)

    本文详细介绍了如何在Linux+systemd环境下,将Docker的默认数据目录(data-root)迁移到其他磁盘空间充足的位置,包括迁移前的准备工作、具体步骤、配置修改、启动和验证等,以及常见问题的排查方法,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • 阿里云镜像安装docker报错的问题及解决方案

    阿里云镜像安装docker报错的问题及解决方案

    这篇文章主要介绍了阿里云镜像安装docker报错的问题及解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 数据卷(Data Volumes)及dockefile详解

    数据卷(Data Volumes)及dockefile详解

    在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作,今天给大家介绍下数据卷(Data Volumes)及dockefile的相关知识,感兴趣的朋友一起看看吧
    2023-01-01
  • 在docker上安装运行mysql实例

    在docker上安装运行mysql实例

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
    2017-01-01
  • Docker下SqlServer发布订阅启用的方法

    Docker下SqlServer发布订阅启用的方法

    发布订阅主要用来做数据库的读写分离,当单台数据库的压力太大时,可以考虑这种方案,本文主要介绍了Docker下SqlServer发布订阅启用的方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Docker命令行与守护进程的交互方法

    Docker命令行与守护进程的交互方法

    这篇文章主要介绍了Docker命令行与守护进程的交互方法的相关资料,需要的朋友可以参考下
    2017-06-06
  • docker安装部署zabbix的全过程

    docker安装部署zabbix的全过程

    zabbix由2部分构成,zabbix server与可选组件zabbix agent,要想搭建一个Zabbix的工作环境,主要有三个方面(界面、服务器和数据库)可以安装在同一台服务器上,也可以不在同一个服务器,本次使用Docker开源的应用容器来快速搭建zabbix,需要的朋友可以参考下
    2024-03-03
  • Docker容器自启动的实现方法

    Docker容器自启动的实现方法

    这篇文章主要介绍了Docker容器自启动的实现方法,详细的介绍了Docker的 Restart policy命令,非常具有实用价值,需要的朋友可以参考下
    2018-09-09

最新评论