如何定位containerd overlay快照关联的镜像及Dockerfile?
定位containerd快照对应的源镜像及Dockerfile方法
1. 查看快照元数据文件
每个快照目录下的meta.json是核心线索,进入目标快照目录(替换[快照ID]为实际的数字ID):
cd /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/[快照ID] cat meta.json
文件中containerd.io/gc.ref.content字段会指向镜像内容的SHA-256 digest,用这个digest过滤镜像列表:
ctr images list --digests | grep [digest值]
2. 反向关联containerd镜像元数据
如果快照对应的容器已删除,检查containerd的镜像元数据目录:
ls /var/lib/containerd/io.containerd.image.v1/images/
每个子目录对应一个镜像的ID,进入后查看config/config.json,其中history字段会记录构建时的Dockerfile指令序列,能还原大部分构建步骤:
cat /var/lib/containerd/io.containerd.image.v1/images/[镜像ID]/config/config.json | jq '.history'
3. 挂载快照文件系统验证内容
挂载快照的文件系统,直接查看jdk版本及相关文件,方便匹配镜像:
# 创建临时挂载点 mkdir -p /mnt/snap-mount # 挂载快照fs层 mount -t overlay overlay -o lowerdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/[快照ID]/fs /mnt/snap-mount # 检查jdk版本 /mnt/snap-mount/usr/bin/java -version # 完成后卸载 umount /mnt/snap-mount
拿到版本信息后,搜索本地或私有镜像仓库中包含对应jdk版本的镜像,再通过docker history --no-trunc或ctr images history查看镜像构建历史,还原近似Dockerfile。
4. 排查containerd内容存储
镜像的内容blob存在/var/lib/containerd/io.containerd.content.v1.content/blobs/下,用快照digest找到对应blob后,反向查找关联的镜像:
ctr images list --digests | grep [完整digest]
内容的提问来源于stack exchange,提问作者Venu Madhav
相关产品推荐
相关产品推荐

