Docker镜像层存储路径在Linux系统中的定位

1次阅读

docker镜像层默认存于/var/lib/docker/overlay2/(overlay2驱动下),具体路径可通过docker info查看Storage Driver和Docker Root Dir确认,各层以哈希命名,含diff/等子目录,需root权限访问且禁止手动修改。

Docker镜像层存储路径在Linux系统中的定位

linux 系统中,Docker 镜像层的实际存储位置取决于所使用的存储驱动(storage driver)和 Docker 的配置,默认路径并非固定不变,但可通过命令快速定位。

查看当前使用的存储驱动

Docker 启动时会根据内核支持和配置自动选择存储驱动(如 overlay2aufszfs 等),不同驱动对应不同的镜像层存放结构:

  • 运行 docker info | grep "Storage Driver" 可确认当前驱动类型
  • 最常见的是 overlay2(现代主流发行版默认),其镜像层位于 /var/lib/docker/overlay2/
  • 若为 aufs,路径是 /var/lib/docker/aufs/zfs 则依赖 ZFS 池配置,不直接映射到普通文件路径

定位镜像层的具体目录结构(以 overlay2 为例)

/var/lib/docker/overlay2/ 下每个子目录对应一个层(layer),由长哈希名标识。镜像由多层按顺序叠加构成:

  • 执行 docker image inspect <IMAGE_ID> 查看 RootFS.Layers 字段,列出所有层的 SHA256 哈希值
  • 这些哈希值通常与 /var/lib/docker/overlay2/ 下的目录名前缀匹配(可能带 -init 后缀)
  • 每层目录内含 diff/(该层新增或修改的文件)、merged/(仅运行时生成,非持久化)、lower/(记录下层哈希链)等

注意实际可读性与权限限制

镜像层内容不是为直接编辑设计的,且受 root 权限保护:

  • 目录属主为 root:root,普通用户需 sudo 才能访问
  • 直接修改 diff/ 内容会导致镜像校验失败,Docker 启动容器时可能报错
  • 推荐通过 Dockerfile 构建或 docker commit 生成新镜像,而非手动操作底层文件

自定义存储路径的可能情况

如果 Docker 启用了自定义根目录(如启动时指定 --data-root /mnt/docker 或配置 /etc/docker/daemon.json 中的 "data-root"):

  • 所有镜像层、容器、卷等数据都会移至该路径下,例如 /mnt/docker/overlay2/
  • 可通过 docker info | grep "Docker Root Dir" 确认实际根目录
  • 修改此路径需重启 dockerd 服务,且原有镜像不会自动迁移
text=ZqhQzanResources