如何确定哪些容器使用docker卷?

ger*_*ome 27 docker docker-volume docker-container

假设我有一个卷,我知道它的名字或ID.

我想确定使用该卷的容器列表(它们的名称或ID).

我可以使用哪些命令来检索此信息?

我认为它可以存储在docker volume inspect <id>命令的输出中,但除了mountpoint("/var/lib/docker/volumes/<id>")之外它没有任何帮助

jwo*_*der 57

docker ps 可以按卷过滤以显示装载给定卷的所有容器:

docker ps -a --filter volume=VOLUME_NAME_OR_MOUNT_POINT
Run Code Online (Sandbox Code Playgroud)

参考:https://docs.docker.com/engine/reference/commandline/ps/#filtering

  • 如果您的目的相反,过滤器也适用于卷 ls:`docker volume ls --filter name=container_name` (12认同)
  • @RaisinBranCrunch 似乎按卷名称过滤,而不是按容器名称过滤。`docker volume ls --filter name=volume_name`。要按容器名称获取卷,请使用“docker inform --format '{{ .Mounts }}'container_name”或其变体:/sf/ask/2109356511/ docker 容器中的卷 (3认同)

Ter*_*ist 10

下面的脚本将显示每个卷以及使用它的容器:

#!/bin/sh

volumes=$(docker volume ls  --format '{{.Name}}')

for volume in $volumes
do
  echo $volume
  docker ps -a --filter volume="$volume"  --format '{{.Names}}' | sed 's/^/  /'
done
Run Code Online (Sandbox Code Playgroud)

按容器列出卷有点棘手,因此这对读者来说是一个练习,但除非您有很多容器/卷,否则上述内容应该足够了。


小智 5

对于每个卷,此脚本输出使用该卷的容器列表,请记住一个卷可能被多个容器使用。

for v in $(docker volume ls --format "{{.Name}}")
do
  containers="$(docker ps -a --filter volume=$v --format '{{.Names}}' | tr '\n' ',')"
  echo "volume $v is used by $containers"
done
Run Code Online (Sandbox Code Playgroud)