![](/img/trans.png)
[英]How to find which folder under overlay2 directory belong to which container?
[英]How do I identify which container owns which overlay directory?
我的/var/lib/docker/overlay
目錄包含我的容器的數據,但目錄名稱都是散列的。 如何確定哪個容器擁有哪個覆蓋層?
您可以像這樣使用jq
:
docker inspect $(docker ps -qa) | jq -r 'map([.Name, .GraphDriver.Data.MergedDir]) | .[] | "\(.[0])\t\(.[1])"'
這使:
/traefik_traefik_1 /var/lib/docker/overlay/58df937e805ec0496bd09686394db421c129e975f67180e737d5af51751af49c/merged
/gitlab-runner /var/lib/docker/overlay/4e5b06f4ee09c60e2dad3a0ce87352cead086eb8229775f6839a477b46dce565/merged
/rancher-agent /var/lib/docker/overlay/6026bb65dd9a83c2088a05cff005a1dd824494222445bab46b7329dc331465aa/merged
解釋:
docker inspect $(docker ps -qa)
顯示完整的泊塢窗詳細信息。
jq -r
解析 json 並輸出常規字符串:
map([.Name, .GraphDriver.Data.MergedDir])
對於原始數組中的每個元素,找到Name
和覆蓋MergedDir
。
"\(.[0])\t\(.[1])"
輸出數組的前兩個元素。
感謝@Matthew的解決方案。 這讓我想到了一個僅限 Docker 的解決方案(沒有 jq):
docker inspect -f $'{{.Name}}\t{{.GraphDriver.Data.MergedDir}}' $(docker ps -aq)
您還可以使用
docker inspect -f $'{{.Name}}\t{{.GraphDriver.Data.MergedDir}}' <container_name>
我使用 Docker inspect 的-f
選項,它允許我使用 Go 模板來格式化docker inspect
的輸出。
我在 Bash 中使用$''
以允許在我的格式中使用像\\t
這樣的特殊字符。
docker ps -qa | xargs -I{} bash -c "docker inspect {} | grep <hash> && echo {}"
例如,這會給你
"LowerDir": "...<hash>...",
"MergedDir": "...<hash>...",
"UpperDir": "...<hash>...",
"WorkDir": "...<hash>..."
24f8ab7ae838
現在您可以告訴容器24f8ab7ae838
擁有覆蓋<hash>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.