首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别哪个容器拥有哪个覆盖目录?

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

Stack Overflow用户
提问于 2018-06-15 12:21:10
回答 3查看 15.2K关注 0票数 29

我的/var/lib/docker/overlay目录包含容器的数据,但是目录名都是散列的。如何确定哪个容器拥有哪个覆盖层?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-15 12:23:47

您可以这样使用jq

代码语言:javascript
复制
 docker inspect $(docker ps -qa) |  jq -r 'map([.Name, .GraphDriver.Data.MergedDir]) | .[] | "\(.[0])\t\(.[1])"'

这意味着:

代码语言:javascript
复制
/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

解释:

代码语言:javascript
复制
docker inspect $(docker ps -qa)

显示完整的码头详细信息。

代码语言:javascript
复制
jq -r

解析json并输出常规字符串:

代码语言:javascript
复制
map([.Name, .GraphDriver.Data.MergedDir])

对于原始数组中的每个元素,请查找Name和覆盖MergedDir

代码语言:javascript
复制
"\(.[0])\t\(.[1])"

输出数组的前两个元素。

票数 41
EN

Stack Overflow用户

发布于 2020-03-25 10:16:17

感谢@Matthew的解决方案。这让我想到了一个只有码头的解决方案(没有jq):

代码语言:javascript
复制
docker inspect -f $'{{.Name}}\t{{.GraphDriver.Data.MergedDir}}' $(docker ps -aq)

您还可以使用

代码语言:javascript
复制
docker inspect -f $'{{.Name}}\t{{.GraphDriver.Data.MergedDir}}' <container_name>

解释

我使用了Docker的-f选项,它允许我使用Go模板来格式化docker inspect的输出。

我在Bash中使用$''来允许像\t这样的特殊字符以我的格式。

票数 29
EN

Stack Overflow用户

发布于 2020-11-26 07:21:41

代码语言:javascript
复制
docker ps -qa | xargs -I{} bash -c "docker inspect {} | grep <hash> && echo {}"

这会给你,例如,

代码语言:javascript
复制
    "LowerDir": "...<hash>...",
    "MergedDir": "...<hash>...",
    "UpperDir": "...<hash>...",
    "WorkDir": "...<hash>..."
24f8ab7ae838

现在,您可以告诉容器24f8ab7ae838拥有覆盖<hash>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50875513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档