如何确定哪些容器使用 docker 卷?
Posted
技术标签:
【中文标题】如何确定哪些容器使用 docker 卷?【英文标题】:How to determine what containers use the docker volume? 【发布时间】:2017-08-09 00:20:40 【问题描述】:假设我有一个卷并且我知道它的名称或 ID。
我想确定使用该卷的容器列表(它们的名称或 ID)。
我可以使用哪些命令来检索这些信息?
我认为它可以存储在 docker volume inspect <id>
命令的输出中,但除了挂载点 ("/var/lib/docker/volumes/<id>"
) 之外,它没有给我任何有用的信息。
【问题讨论】:
可能有更直接的方法,但大概你可以遍历所有容器(即docker ps -a
的输出),然后查看docker inspect
的相关部分。
使用下面的@jwodder 建议...使用xargs 将每个卷ID 传递给docker ps...
命令,并带有...docker volume ls -q | xargs -I_ docker ps -a --filter volume=_
【参考方案1】:
docker ps
可以按卷过滤以显示挂载给定卷的所有容器:
docker ps -a --filter volume=VOLUME_NAME_OR_MOUNT_POINT
参考:https://docs.docker.com/engine/reference/commandline/ps/#filtering
【讨论】:
不确定区别,但仅以.Mounts
而不是.Config.Volumes
(带有docker container inspect
)引用的卷将不会显示在此过滤器中。
如果你是相反的,过滤器也适用于卷 ls:docker volume ls --filter name=container_name
如果您想输出关联的容器名称列表,例如在脚本中使用输出,您可以附加格式参数:docker ps -a --filter volume=VOLUME_NAME --format ".Names"
【参考方案2】:
这与 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()
【讨论】:
您必须使用 python 3.7 或更高版本运行它。 3.6 没有子进程模块的“capture_output=True”。以上是关于如何确定哪些容器使用 docker 卷?的主要内容,如果未能解决你的问题,请参考以下文章