Docker磁盘占用排查与迁移的完整复盘过程

 更新时间:2026年05月28日 16:57:53   作者:黑风风  
这篇文章主要介绍了Docker磁盘占用排查与迁移的完整复盘过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

本文记录了一次 Docker 磁盘占用排查与迁移的完整复盘。

一、问题背景

服务器磁盘分布大致如下:

  • 系统盘:/dev/vda1,40G,挂载 /
  • 数据盘:/dev/vdb1,493G,挂载 /data

初始现象是:

  • / 分区使用率偏高
  • /var/lib/docker/overlay2 显示挂载在根分区
  • 怀疑 Docker 镜像或容器占用了大量系统盘空间

二、Docker 磁盘占用的正确查看方式

1. 系统层面(df)

df -h

如果看到类似:

overlay 40G 20G 18G 54% /var/lib/docker/overlay2/.../merged

不要误判

这并不是 Docker 独占 40G,而是 overlayfs 映射了宿主机根分区

2. Docker 视角(关键命令)

基础统计

docker system df

详细拆分(强烈推荐)

docker system df -v

你可以精确看到:

每个镜像的:

  • SIZE
  • SHARED SIZE
  • UNIQUE SIZE
  • 是否被容器使用

构建缓存(Build Cache)的真实占用

容器自身的写层大小

三、为什么会看到大量<none>镜像?

示例:

<none>  <none>  554MB
<none>  <none>  554MB
...

这些并不是“异常镜像”,而是悬空镜像(dangling images)

产生原因总结

  1. 多次 docker build,旧镜像标签被新镜像覆盖
  2. 构建中间层未被任何镜像引用
  3. CI / 自动构建未做清理策略

本质上:

Docker 很保守,不会自动删除历史构建产物

四、Docker 构建缓存(Build Cache)才是“隐形大户”

在一次排查中发现:

Build cache usage: 11.56GB

而镜像 + 容器加起来不到 1GB。

这类缓存来自:

  • docker build
  • BuildKit
  • 多阶段构建的中间层

清理方式

docker builder prune

如果你想彻底清:

docker system prune -a

⚠️ 注意:

这会删除所有未被容器使用的镜像

五、Docker 数据目录迁移的正确姿势(简版)

以下步骤在 Docker 已停止 的前提下进行

1. 停止 Docker

systemctl stop docker

2. 拷贝数据(推荐 rsync)

rsync -a /var/lib/docker/ /data/docker/

3. 修改配置

vim /etc/docker/daemon.json
{
  "data-root": "/data/docker"
}

4. 启动 Docker

systemctl start docker

5. 验证

docker info | grep "Docker Root Dir"

参考资料:

1.Docker 官方文档 · 磁盘使用分析(docker system df)

2.Docker 官方文档 · 清理未使用资源(prune)

3.Docker 官方文档 · BuildKit 与构建缓存

解释 Build Cache 的来源、生命周期以及为何会大量占用磁盘。

https://docs.docker.com/build/cache/

4.Docker 官方文档 · daemon.json 配置项说明

包含 data-root(Docker 数据目录迁移)的官方定义与示例。

https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-fil

六、总结

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

相关文章

  • Docker  Registry 私有仓库搭建详细步骤

    Docker Registry 私有仓库搭建详细步骤

    这篇文章主要介绍了Docker Registry 私有仓库搭建的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker获取容器mac地址和手动设置容器mac地址

    Docker获取容器mac地址和手动设置容器mac地址

    获取容器的 MAC 地址 可以使用 docker inspect 命令来查看容器的详细信息,包括 MAC 地址。 示例: 这条命令会输出容器 my_container 的 MAC 地址。 手动设置容器
    2026-02-02
  • docker的具名挂载与匿名挂载实现

    docker的具名挂载与匿名挂载实现

    本文主要介绍了docker的具名挂载与匿名挂载实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Docker拉取镜像超时的原因分析与解决方法

    Docker拉取镜像超时的原因分析与解决方法

    这篇文章主要为大家详细介绍了Docker在拉取镜像时超时的相关原因分析与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • docker pull出现错误或速度慢具体解决办法

    docker pull出现错误或速度慢具体解决办法

    docker pull的时候速度特别慢,急死我了,相信看到文章的你跟我是一个心情,下面这篇文章主要给大家介绍了关于docker pull出现错误或速度慢的具体解决办法,需要的朋友可以参考下
    2024-05-05
  • Vue.js中的watch属性详解

    Vue.js中的watch属性详解

    在Vue.js中,watch属性是一种非常重要的属性,它可以监听Vue实例中指定的数据变化,并在数据发生变化时执行相应的操作,本文将对 Vue.js中的watch属性进行详细的介绍,并附上相关的代码示例,需要的朋友可以参考下
    2023-06-06
  • Mobaxterm解锁Docker的技巧

    Mobaxterm解锁Docker的技巧

    Mobaxterm是一款功能强大的工具,可以帮助开发者更高效地使用Docker,通过结合Docker和Mobaxterm,你可以轻松地管理Docker容器、运行Docker应用,并实现远程访问,本文给大家介绍Mobaxterm解锁Docker的详细过程,感兴趣的朋友一起看看吧
    2025-05-05
  • 使用docker-compose创建网桥过程

    使用docker-compose创建网桥过程

    文章介绍了通过docker-compose创建网桥(使用hello-world镜像),容器退出后网桥仍存在;删除网桥时使用docker-composedown,网桥消失但其他容器可能仍依赖其网络
    2025-08-08
  • docker安装Wordpress速度过慢的问题解决方法

    docker安装Wordpress速度过慢的问题解决方法

    Docker是一种开源的容器化平台,可以帮助开发者将应用程序及其依赖项打包成一个独立的容器,,WordPress是一个流行的开源内容管理系统(CMS),用于创建和管理网站,本文给大家介绍了docker安装Wordpress速度过慢的问题解决方法,需要的朋友可以参考下
    2024-05-05
  • docker保存和加载tar及其tar.gz方式

    docker保存和加载tar及其tar.gz方式

    这篇文章主要介绍了docker保存和加载tar及其tar.gz方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04

最新评论