You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找使用指定Overlay目录的Docker镜像

定位包含指定文件的Docker镜像问题排查

问题背景

日常工作中因文档缺失,需要找到包含libimportant.so文件的Docker镜像。通过find命令定位到该文件位于本地Docker的Overlay2层中:

$ sudo find / -name libimportant.so 2>/dev/null
/var/lib/docker/overlay2/fedc8afc375f5bf02c74542b5d3a2621fcfd522875dff06bbb63fff6d1251234/diff/usr/lib64/libimportant.so

本地有200多个Docker镜像,且当前无运行容器,需要找出使用该Overlay层的镜像。

尝试的两种方法及问题

方法1:创建容器导出搜索(耗时过长未完成)

尝试遍历所有镜像,创建临时容器后导出文件列表搜索目标文件,但因镜像数量过多,耗时太长中途终止:

$ docker image ls -qa | while read -r _hash; do _container="$(docker create "$_hash")"; docker container export "$_container" | tar t | grep -q 'libimportant.so' && echo "$_hash"; docker container rm "$_container" >/dev/null; done
^C
$

方法2:检查镜像GraphDriver数据(无结果)

尝试通过docker image inspect查看每个镜像的GraphDriver数据,匹配Overlay层哈希,但未得到任何结果:

$ docker image ls -qa | while read -r imageid; do docker image inspect --format '{{json .GraphDriver.Data}}' "$imageid" | grep -q 'fedc8afc375f5bf02c74542b5d3a2621fcfd522875dff06bbb63fff6d1251234' && echo "$imageid"; done
$ 

Docker版本信息

$ docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:52 2020
 OS/Arch:           linux/amd64
 Experimental:      false

根因分析与解决

后续排查发现,/etc/docker/daemon.json中data-root被配置为非/var/lib/docker的目录,导致/var/lib/docker下的Overlay层并非当前docker image ls列出的镜像所使用的存储层。修正data-root配置后,使用方法2的GraphDriver数据匹配方式成功找到目标镜像。

内容的提问来源于stack exchange,提问作者Svintoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:55:25