根据进程找容器

find_docker.sh

1
2
3
4
5
#!/bin/bash

docker ps -a --filter id=$(cat /proc/$1/cgroup | grep docker | awk -F '/' '{print $3}' | uniq)
# or
docker ps -a --filter id=$(cat /proc/$1/cgroup | grep docker | awk -F '/' '{print $3}' | awk -F'-' '{print$2}' | awk -F'.' '{print $1}' | uniq)

Usage:

1
./find_docker.sh  12345

根据overlayfs找容器或镜像layer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash

# 获取输入参数,即文件系统层ID
fslayer_id=$1

# 遍历所有容器
for container_id in $(docker ps -aq)
do
# 使用docker inspect命令获取容器信息,并查找文件系统层ID
if docker inspect $container_id | grep -q "$fslayer_id"
then
# 如果找到了,打印容器ID并退出脚本
echo "File system layer $fslayer_id is in container: $container_id"
exit 0
fi
done


# 逐个检查所有的镜像
for image_id in $(docker images -q)
do
# 使用docker history命令检查镜像的每一层
if docker history $image_id | grep -q "$fslayer_id"
then
# 如果找到了,打印镜像ID并退出脚本
echo "OverlayFS layer $fslayer_id is in image: $image_id"
exit 0
fi
done

# 如果遍历所有容器后还没有找到,打印错误信息
echo "File system layer $fslayer_id was not found in any container or image"
exit 1

squash镜像

docker squash