根据overlay目录获取对应容器

一个生产环境的问题排查案例 overlay挂载影响host主机根目录(排查) ,我发现根据overlay目录找到容器在日常维护中很有用,特别是一些目录异常(占用空间),快速定位到存在异常的容器可以帮助我们迅速缩小排查范围。

简单来说,当系统中 Docker OverlayFS存储引擎 挂载异常:

通过 mount 检查 /dev/sda3 挂载输出
/dev/sda3 on / type ext4 (rw,relatime,prjquota,data=ordered)
/dev/sda3 on /home/t4/docker/overlay/2312e9718d905ac6630d9252c84308a5fb14de503166bcf37a2ae6193265ca22/merged/usr/share/zoneinfo/Asia/Shanghai type ext4 (ro,relatime,prjquota,data=ordered)
/dev/sda3 on /home/t4/docker/overlay/9595fee13549814ce88fbc91b19d6f76185e179695bea7ff4c73d6749402d2bb/merged/usr/share/zoneinfo/Asia/Shanghai type ext4 (ro,relatime,prjquota,data=ordered)
/dev/sda3 on /home/t4/docker/overlay/5236144a35c37c27aedc261bde7c3527cc1553ddf89ed73448aced49db961e79/merged/usr/share/zoneinfo/Asia/Shanghai type ext4 (ro,relatime,prjquota,data=ordered)

可以通过以下命令获得每个overlay目录对应的容器:

通过 overlay 目录获取容器名
docker inspect $(docker ps -qa) |  jq -r 'map([.Name, .GraphDriver.Data.MergedDir]) | .[] | "\(.[0])\t\(.[1])"'

输出:

通过 overlay 目录获取容器名
/k8s_hcp_hcp-pre-7867c5c9b5-l67kt_hcs-pre_9b5f8a9c-c64b-4c69-aa2a-05a6f98080ca_0	/home/t4/docker/overlay/2312e9718d905ac6630d9252c84308a5fb14de503166bcf37a2ae6193265ca22/merged
/k8s_hcp_hcp-pre-7867c5c9b5-5rlq5_hcs-pre_750fb781-2ffc-45e0-a827-000916f8a771_0	/home/t4/docker/overlay/9595fee13549814ce88fbc91b19d6f76185e179695bea7ff4c73d6749402d2bb/merged
/k8s_hcp_hcp-pre-7867c5c9b5-8hzbd_hcs-pre_7ca5c015-9670-4464-90df-852381486418_0	/home/t4/docker/overlay/5236144a35c37c27aedc261bde7c3527cc1553ddf89ed73448aced49db961e79/merged

进一步,可以通过 docker inspect 检查容器配置

参考