如何查看哪个 docker 卷正在或正在被哪个容器使用

How to see which docker volume is or was being used by which container

我可以用 docker ps (-a) 列出所有容器,我可以用 docker volumes ls 列出所有卷,当我检查 volume 时,我可以看到 namedrivermountpoint,但不是它正在使用的容器。

当我使用docker inspect <container>时,我可以看到像这样的挂载数据,例如:

"Mounts": [
    {
        "Name": "centos_db_symfony",
        "Source": "/var/lib/docker/volumes/centos_db_symfony/_data",
        "Destination": "/var/lib/mysql",
        "Driver": "local",
        "Mode": "rw",
        "RW": true,
        "Propagation": "rprivate"
    },

所以理论上,我可以编写一个脚本来遍历所有容器以按名称匹配特定的 volume。但是我 运行 一些容器通过 docker-compose,并且没有将名称(就像现在在 v2 中可能的那样)绑定到某些卷,所以它们在 docker volume ls 列表中显示为 sha256 ,像这样:

DRIVER              VOLUME NAME
local               34009871ded5936bae81197247746b708c3ec9e9b9832b702c09736a90...etc
local               centos_data
local               centos_db_symfony

在这种情况下,34009871ded5(示例)是在我将卷命名为 docker-composecentos_db_symfony 之前创建的。

问题

docker-compose.yml 卷信息更新时,就像在这种情况下,使卷命名并更新 docker inspect <container> 中的信息,历史是否永远丢失,或者我可以找出卷是哪个容器被?使用如果是这样,是否也可以像这样恢复旧卷?

额外信息

docker-compose version 1.6.0, build d99cad6
Docker version 1.10.2, build c3959b1

截至 Docker v1.11 you can filter ps by volumes! Unfortunately this is not available in previous versions

使用方法如下:

docker ps -f "volume=/var/lib/mysql" 

docker ps -f "volume=centos_db_symfony"