如何查看 Docker 镜像里包含什么内容?

查看镜像内容四种方法:起容器 exec 进去看、docker create+export 导出文件系统不启动容器、docker history 看分层构建历史、用 dive 工具逐层可视化。本文给出命令与场景选择。

最佳实践
如何查看 Docker 镜像里包含什么内容?封面

四种方法按场景选:①起个容器 docker run -it --rm 镜像 sh 直接看;②不想启动:docker create 创建容器后 docker export 导出 tar 解包看;③看构建历史与每层大小:docker history 镜像;④逐层精细分析用 dive 工具。

方法一:起容器直接看(最直观)

docker run -it --rm myimage sh     # 有 shell 的镜像
ls -l /
cat /etc/os-release

--rm 退出即自动删容器,不留垃圾。

方法二:不启动容器,导出文件系统

docker create --name tmp myimage     # 只创建不启动
docker export tmp -o fs.tar
docker rm tmp
mkdir fs && tar -xf fs.tar -C fs     # 解包随便翻

适合镜像入口命令会卡住/报错的场景,也适合 distroless(无 shell)镜像。

方法三:看分层历史

docker history myimage
docker history --no-trunc myimage    # 看完整命令

每层对应的 Dockerfile 指令与大小一目了然——排查"镜像为什么这么大"先看这里,还能发现历史里残留的敏感信息(如被删除的文件仍存在于某层)。

方法四:dive 逐层分析(镜像减肥神器)

dive myimage

交互式展示每层新增/修改的文件,精准定位体积元凶。

只想看配置不看文件

docker inspect myimage    # 环境变量、入口命令、暴露端口等元数据

观测云对照

镜像内容治理也是可观测话题。 镜像体积、层数、基础镜像版本趋势纳入平台后,配合构建记录能持续优化镜像卫生;运行容器的镜像版本分布也在 DataKit 采集范围内。

常见问题(FAQ)

Q:export 和 save 看到的有什么不同?
A:export 是容器文件系统单层快照;docker save 是完整镜像(含所有层与元数据),解包后按层目录组织。

Q:镜像里没有 sh,方法一报错?
A:distroless/scratch 类镜像,用方法二导出看,或 docker run --entrypoint 指定镜像里已有的可执行文件。

Q:想看某一层具体加了什么文件?
A:docker save 解包后逐层看 tar;或 dive 工具直接展示。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台