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

假设我有一个卷,我知道它的名字或者 id。

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

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

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

46414 次浏览

docker ps can filter by volume to show all of the containers that mount a given volume:

docker ps -a --filter volume=VOLUME_NAME_OR_MOUNT_POINT

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

这是有关 Jwodder的建议,如果有任何帮助的人。 It basically gives the summary of all the volumes, in case you have more than a couple and are not sure, which is which.

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

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