我的/var/lib/docker/overlay
目录包含我的容器的数据,但目录名都是哈希值。如何确定哪个容器拥有哪个叠加?
答案 0 :(得分:5)
感谢@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
。
答案 1 :(得分:2)
你可以这样使用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])"
输出数组的前两个元素。
答案 2 :(得分:0)
docker ps -qa | xargs -I{} bash -c "docker inspect {} | grep <hash> && echo {}"
例如,这会给您
"LowerDir": "...<hash>...",
"MergedDir": "...<hash>...",
"UpperDir": "...<hash>...",
"WorkDir": "...<hash>..."
24f8ab7ae838
现在您可以告诉容器24f8ab7ae838
拥有叠加层<hash>
。