用 docker history --no-trunc 可查看镜像各层完整构建指令、增量大小及创建时间;配合 --format 能聚焦关键字段,便于识别冗余层和大体积操作。

直接用 docker history 就能查到每一层的大小和构建命令,但默认输出会截断关键内容,需要加参数才能看清全貌。
基础命令:列出分层结构与核心字段
执行以下命令即可显示镜像各层的创建时间、指令、大小等信息:
docker history <镜像名或ID>
输出中几列最关键:
-
CREATED BY:对应 Dockerfile 中的实际指令(如
RUN apt-get install curl或COPY . /app) - SIZE:该层新增的文件体积(不是累计大小,是增量)
- CREATED:该层生成的时间戳
- IMAGE:本层对应的短 ID(最上面一行是当前镜像 ID)
必须加 --no-trunc 才能看到完整指令
默认情况下,CREATED BY 列会被截断,比如只显示 /bin/sh -c #(nop) RUN apt-get...,看不出具体装了什么。加上 --no-trunc 才能展开全部内容:
docker history --no-trunc nginx:alpine
这样就能清楚看到每条 RUN、COPY、ADD 等指令的原始写法,对排查冗余安装、未清理缓存等问题非常关键。
用 --format 定制输出,聚焦关键信息
如果只想快速比对指令和大小,可以用 --format 提取特定字段:
docker history --no-trunc --format "{{.CreatedBy}} => {{.Size}}" nginx:alpine
输出类似:
RUN |1 builder=buildkit /bin/sh -c apk add --no-cache curl => 4.2MBCOPY docker-entrypoint.sh / => 4.5kB
这种格式便于人工扫描“大层”或可疑命令,也方便脚本进一步处理。
注意 SIZE 是增量,不是累计
每一层的 SIZE 表示它比上一层多占多少空间。例如:
- 第1层(FROM alpine):2.8MB
- 第2层(RUN apk add curl):+4.2MB
- 第3层(COPY app.py):+3.1kB
镜像总大小 ≈ 各层 SIZE 之和(忽略元数据开销)。所以某层突然出现几十 MB,大概率是 COPY 了大文件、没清理 apt 缓存,或误装了调试工具。


















