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

b91juud3  于 2023-05-06  发布在  Docker
关注(0)|答案(5)|浏览(590)

如果我转到/var/lib/docker/overlay 2并执行“ls”,那么我会得到如下内容:
0349eb19b8ac737f2a93e33f665ab26d95de636bf48de79e6e7d7cdd76c0cd78 0c32910d4c394834e239f0c8f0776b36d87f7567b3120dff92ccd8d0f98577b0 ...
现在这些文件夹中的一个或多个属于一个容器。我想知道哪个文件夹由哪个容器使用?
谢谢

5ssjco0h

5ssjco0h1#

可以使用此命令

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

jk9hmnmh2#

现在这些文件夹中的每一个都属于一个容器
不,他们不知道。容器可以使用这些文件夹中的一个或多个。但是同一个文件夹可以在多个容器中使用。这就是层重用在docker中的工作方式,它被下载或构建一次,然后在覆盖文件系统中作为层重用。
因此,overlay2目录没有Map到“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"
}

在文件系统级别,您还可以查看/var/lib/docker/containers/${container_id}/config.v2.json
请注意,所有这些都是docker的内部结构,不能保证它在下一个版本中不会改变。你不应该直接与这些文件和目录交互,因为docker不知道你是否做了破坏性的更改,也不会通过再次下载层来修复损坏的镜像。正如其他人所发现的,when you break it,你可以保留这两块作为纪念品,什么不做。

t5zmwmid

t5zmwmid3#

你可以使用docker inspect命令来获取关于容器的所有信息,该容器将提供包括卷在内的信息。

docker inspect <container name/id>

你也可以在命名卷的帮助下命名这些卷。
参考:https://docs.docker.com/storage/volumes/

xu3bshqb

xu3bshqb4#

我使用下面的方法来识别使用此类文件夹的容器,

  • Docker PS|awk '{print $1}'(将其保存在文件中- continerid)
#!/bin/bash
input="./containerid"
while IFS= read -r line
do
  echo "$line"
  docker inspect $line | grep -i "5b....."
done < "$input"
pb3skfrl

pb3skfrl5#

下面的命令提供了一个很好的容器及其体积,图像和空间使用情况的视图。

docker system df -v

相关问题