簡體   English   中英

如何確定哪個容器擁有哪個覆蓋目錄?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM