如何查看 Docker 镜像里包含什么内容?
查看镜像内容四种方法:起容器 exec 进去看、docker create+export 导出文件系统不启动容器、docker history 看分层构建历史、用 dive 工具逐层可视化。本文给出命令与场景选择。
四种方法按场景选:①起个容器 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 工具直接展示。