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

在 linux 系统中,Docker 镜像层的实际存储位置取决于所使用的存储驱动(storage driver)和 Docker 的配置,默认路径并非固定不变,但可通过命令快速定位。
查看当前使用的存储驱动
Docker 启动时会根据内核支持和配置自动选择存储驱动(如 overlay2、aufs、zfs 等),不同驱动对应不同的镜像层存放结构:
- 运行
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 服务,且原有镜像不会自动迁移