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

How to determine what containers use the docker volume?

假设我有一个卷并且我知道它的名称或 ID。

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

我可以使用什么命令来检索此信息?

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

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

docker ps -a --filter volume=VOLUME_NAME_OR_MOUNT_POINT

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

这与 jwodder 的建议有关,如果对某人有帮助的话。 它基本上给出了所有卷的摘要,以防你有超过几卷但不确定是哪一卷。

import io
import subprocess
import pandas as pd


results = subprocess.run('docker volume ls', capture_output=True, text=True)

df = pd.read_csv(io.StringIO(results.stdout),
                 encoding='utf8',
                 sep="    ",
                 engine='python')

for i, row in df.iterrows():
    print(i, row['VOLUME NAME'])
    print('-' * 20)
    cmd = ['docker', 'ps', '-a', '--filter', f'volume={row["VOLUME NAME"]}']
    print(subprocess.run(cmd,
           capture_output=True, text=True).stdout)
    print()

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

#!/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

按容器列出卷有点棘手,所以这是 reader 的练习,但上面的内容应该足够了,除非你有很多 containers/volumes.