docke目录下overlay2和container关系
目的
/var/lib/docker/overlay2/
env
- docker
overlay2
/var/lib/docker/overlay2 是 Docker 使用 OverlayFS 存储驱动时的默认路径,它用于存放容器和镜像的联合文件系统(层)。
1./var/lib/docker/overlay2目录解析
这个目录包含了**镜像层(只读层)和容器的(可写层)**,组织结构如下:
1 | /var/lib/docker/overlay2/ |
每个 <layer-id> 是 Overlay 层的标识(类似 UUID)。
m1.查找某个容器对应的 overlay2 层
1. 找到容器的 ID 或名称
1 | docker ps -a |
2. 查找容器的 metadata 目录
Docker 容器的元信息存在 /var/lib/docker/containers/<container-id>/config.v2.json 中。
1 | cat /var/lib/docker/containers/<container-id>/config.v2.json |
这个文件中有一个字段叫 "GraphDriver",内容大致如下:
1 | "GraphDriver": { |
从中可以得到该容器使用的 overlay2 层目录名。
m2.利用lsof定位
1.查出哪个容器正在使用某个 merged 挂载目录:
1 | lsof +D /var/lib/docker/overlay2/<layer-id>/merged |
如果该容器正在运行,会看到类似:
1 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME |
2.根据pid定位实际打开关联文件
lsof -p xxx
根据蛛丝马迹分析,是那个容器
m3.容器overlay2 层和进程关系
/var/lib/docker/overlay2/
1.查询容器UpperDir
docker inspect $(docker ps -qa) |grep -C 60 UpperDir
2.根据结果找到容器关联信息