如何识别哪个容器拥有哪个覆盖目录?

时间:2018-06-15 12:21:11

标签: docker

我的/var/lib/docker/overlay目录包含我的容器的数据,但目录名都是哈希值。如何确定哪个容器拥有哪个叠加?

3 个答案:

答案 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>