Docker 镜像存储在宿主机的什么位置?

Linux 上 Docker 镜像默认存 /var/lib/docker(overlay2 分层目录),用 docker info 查 Docker Root Dir 确认;Mac/Windows 的 Docker Desktop 存在虚拟机磁盘文件里。本文给出各平台位置与迁移方法。

最佳实践
Docker 镜像存储在宿主机的什么位置?封面

快速查询:运行 docker info,输出里的 Docker Root Dir 就是镜像与容器的存储根目录(Linux 默认 /var/lib/docker),Storage Driver(通常是 overlay2)决定分层组织方式。Mac/Windows 的 Docker Desktop 因为跑在虚拟机里,数据在 VM 磁盘文件中(Mac:~/Library/Containers/com.docker.docker/Data/,Windows:C:\ProgramData\DockerDesktop 及 WSL2 的 vhdx)。

各平台默认位置

平台 位置
Ubuntu/Debian/Fedora/CentOS /var/lib/docker/
macOS(Docker Desktop) ~/Library/Containers/com.docker.docker/Data/vms/0/(VM 磁盘)
Windows(Docker Desktop) C:\ProgramData\DockerDesktop(WSL2 后端在发行版 vhdx 内)

Linux 目录结构速览

/var/lib/docker/
├── overlay2/       # 镜像层与容器层(大头)
├── volumes/        # 命名卷数据
├── containers/     # 容器配置与日志(json.log)
├── image/          # 镜像元数据
└── buildkit/       # 构建缓存

提醒:这个目录归 Docker 守护进程管理,结构随版本变化——看可以,du 分析可以,别手动改/删里面任何文件,容易把守护进程搞坏。清理走 docker system prune

查占用与清理

docker system df          # 各类数据占用汇总
du -sh /var/lib/docker/*  # 目录级占用(需 sudo)
docker system prune -a    # 官方清理姿势

迁移到大磁盘

/var/lib/docker 撑爆系统盘是常见事故,迁到数据盘:

// /etc/docker/daemon.json
{ "data-root": "/data/docker" }
sudo systemctl stop docker
sudo rsync -aHAXS /var/lib/docker/ /data/docker/
sudo systemctl start docker
docker info | grep "Docker Root Dir"   # 验证

观测云对照

Docker 存储目录重点监控。 /var/lib/docker 的磁盘水位、inode 用量由 DataKit 采集,监控器设阈值告警;容器日志无限增长这个最常见的撑爆原因,用日志轮转配置(log-opt)根治。

常见问题(FAQ)

Q:能直接把 /var/lib/docker 拷到另一台机器迁镜像吗?
A:不建议。跨机迁镜像用 docker save/load(见本系列《不用镜像仓库在主机间复制 Docker 镜像》),data-root 目录直拷易出一致性问题。

Q:overlay2 里的 diff 目录就是镜像内容吗?
A:是分层的各层内容,需要联合视图才是完整文件系统;手动翻这个目录意义不大,用 docker image inspect / export 更合适。

Q:Mac 上 VM 磁盘文件几十 G 正常吗?
A:Desktop 的虚拟磁盘只增不减(内部清了外部不缩),可在 Desktop 设置里 Reduce disk image size 或重置。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台