Docker已安装应用数据存储位置及镜像构建数据存储疑问
嘿,我来帮你理清这两个容易混淆的Docker数据存储问题:
一、构建时下载的400MB数据去哪了?
你通过--data-root修改的是Docker运行时核心数据的存储路径(比如镜像、容器、卷这些),但这里有两个关键细节导致你看不到那400MB数据:
- BuildKit构建缓存独立于data-root
现在Docker默认用BuildKit作为构建引擎,它的临时下载层、构建缓存是单独管理的,并不存放在你指定的data-root目录里。默认存储位置分两种情况:- 用root用户执行构建:
/var/lib/docker/buildx/buildkit - 非root用户(已配置Docker无需sudo):
~/.local/share/docker/buildx/buildkit
- 用root用户执行构建:
你可以用这两个命令验证:
# 查看BuildKit的缓存目录 docker buildx inspect --bootstrap # 查看目录大小 du -sh /var/lib/docker/buildx/buildkit # 对应root用户场景
- BuildKit构建的镜像默认不加载到本地仓库
如果你用的是docker buildx build命令(而非传统的docker build),默认情况下构建完成的镜像不会自动导入到本地Docker镜像仓库,只会留在BuildKit的缓存里,所以你在data-root的images目录里看不到对应的文件,大小自然只有4KiB。解决方法是构建时加--load参数:
docker buildx build --load -t mongodb .
如果想让BuildKit的缓存也迁移到你指定的data-root,可以创建自定义的buildx builder实例:
docker buildx create --use --name my-custom-builder --cache-dir /your/data-root/buildx-cache
二、Docker中已安装应用的数据存储位置
Docker里应用的数据存储分不同场景,对应不同的位置:
- 镜像/容器核心运行数据:就是你通过
--data-root指定的目录,核心子目录的作用:images:存储镜像的分层文件(构建成功并加载到本地的镜像会存在这里)containers:存储容器的读写层、配置文件和日志volumes:存储命名卷的数据(比如用docker volume create或Compose定义的命名卷)
- 绑定挂载的数据:如果启动容器时用了
-v /宿主机路径:/容器内路径这种绑定挂载,数据直接存在宿主机的/宿主机路径,和Docker的data-root完全无关 - 匿名卷数据:如果容器用了匿名卷(比如Dockerfile里的
VOLUME指令,或启动时-v /容器内路径),数据会存在data-root/volumes下的随机命名文件夹里 - 临时内存数据:如果用了
tmpfs挂载(比如docker run --tmpfs /tmp),数据只存在内存中,容器销毁后就消失
内容的提问来源于stack exchange,提问作者Tomek




