如何查看哪个容器使用哪个docker卷

Fra*_*ere 9 docker docker-compose

我可以列出所有容器docker ps (-a),我可以列出所有卷docker volumes ls,当我检查一下时volume,我可以看到name,driver而且mountpoint,而不是它正在使用的容器.

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

"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"
    },
Run Code Online (Sandbox Code Playgroud)

所以从理论上讲,我可以编写一个循环遍历所有容器的脚本来匹配特定volume的名称.但是我运行了一些容器docker-compose,并没有将某个名称(就像现在可能在v2中)绑定到某些卷,因此它们在docker volume ls列表中显示为sha256 ,如下所示:

DRIVER              VOLUME NAME
local               34009871ded5936bae81197247746b708c3ec9e9b9832b702c09736a90...etc
local               centos_data
local               centos_db_symfony
Run Code Online (Sandbox Code Playgroud)

在这种情况下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
Run Code Online (Sandbox Code Playgroud)

Mr_*_*que 11

Docker v1.11开始,您可以psvolumes 过滤!不幸的是,这在以前的版本中不可用.

以下是它的使用方法:

docker ps -f "volume=/var/lib/mysql" 
Run Code Online (Sandbox Code Playgroud)

要么

docker ps -f "volume=centos_db_symfony"
Run Code Online (Sandbox Code Playgroud)

  • 我相信这个功能是在Docker 1.11中添加的,因此OP需要升级才能获得它. (3认同)