如何查找overlay2目录下的哪个文件夹属于哪个容器?

Leo*_*Man 14 docker

如果我转到 /var/lib/docker/overlay2 并执行“ls”,那么我会得到如下内容:

0349eb19b8ac737f2a93e33f665ab26d95de636bf48de79e6e7d7cdd76c0cd78 0c32910d4c394834e239f0c8f0776b36d87f7567b3120dff92ccd8d0f98577b0 ...

现在,这些文件夹中的一个或多个属于一个容器。我想知道哪个容器使用哪个文件夹?

谢谢

张馆长*_*张馆长 25

可以使用这个命令

for container in $(docker ps --all --quiet --format '{{ .Names }}'); do
    echo "$(docker inspect $container --format '{{.GraphDriver.Data.MergedDir }}' | \
      grep -Po '^.+?(?=/merged)'  ) = $container"
done
Run Code Online (Sandbox Code Playgroud)


BMi*_*tch 11

现在每个文件夹都属于一个容器

不,他们没有。容器可以使用这些文件夹中的一个或多个。但同一个文件夹可能会在多个容器中使用。这就是层重用在 docker 中的工作原理,它被下载或构建一次,然后作为覆盖文件系统中的层重用。

因此,没有从overlay2目录到“a”容器的映射。但是您可以查看每个容器和图像,以了解它用于各个层的目录:

$ docker container inspect --format '{{json .GraphDriver.Data }}' ${container_id} | jq .
{
  "LowerDir": "/var/lib/docker/overlay2/772a19168d50648e1bfb156604281a6acedb9025e588fe35da97deb18b95150a-init/diff:/var/lib/docker/overlay2/ixbbgqs1303yho2a3dcwwlw2u/diff:/var/lib/docker/overlay2/vdywc8lgvc3uzoq8z2m2j49io/diff:/var/lib/docker/overlay2/l4ykndb21ul7ttmsdn05ps3q5/diff:/var/lib/docker/overlay2/66fce03abb53f3576b039c5177e687f304d1a7ddb78d57392b8825ab34350299/diff",
  "MergedDir": "/var/lib/docker/overlay2/772a19168d50648e1bfb156604281a6acedb9025e588fe35da97deb18b95150a/merged",
  "UpperDir": "/var/lib/docker/overlay2/772a19168d50648e1bfb156604281a6acedb9025e588fe35da97deb18b95150a/diff",
  "WorkDir": "/var/lib/docker/overlay2/772a19168d50648e1bfb156604281a6acedb9025e588fe35da97deb18b95150a/work"
}

$ docker image inspect --format '{{json .GraphDriver.Data}}' ${image_name} | jq .
{
  "LowerDir": "/var/lib/docker/overlay2/vdywc8lgvc3uzoq8z2m2j49io/diff:/var/lib/docker/overlay2/l4ykndb21ul7ttmsdn05ps3q5/diff:/var/lib/docker/overlay2/66fce03abb53f3576b039c5177e687f304d1a7ddb78d57392b8825ab34350299/diff",
  "MergedDir": "/var/lib/docker/overlay2/ixbbgqs1303yho2a3dcwwlw2u/merged",
  "UpperDir": "/var/lib/docker/overlay2/ixbbgqs1303yho2a3dcwwlw2u/diff",
  "WorkDir": "/var/lib/docker/overlay2/ixbbgqs1303yho2a3dcwwlw2u/work"
}
Run Code Online (Sandbox Code Playgroud)

在文件系统级别,您还可以查看/var/lib/docker/containers/${container_id}/config.v2.json.

请注意,所有这些都是 docker 内部的,并且不能保证在下一个版本中不会改变。您不应该直接与这些文件和目录交互,因为 docker 不知道您是否进行了重大更改,并且不会通过再次下载图层来修复损坏的映像。正如其他人发现的那样,当你打破它时,你可以保留两块碎片作为纪念品,以备不时之需。


小智 1

您可以使用 dockerspect 命令获取有关容器的所有信息,该容器将提供包括卷在内的信息。

docker inspect <container name/id>
Run Code Online (Sandbox Code Playgroud)

您还可以借助命名卷来命名这些卷。

参考: https: //docs.docker.com/storage/volumes/