【问题标题】:How to remove all docker volumes?如何删除所有 docker 卷?
【发布时间】:2016-08-08 09:50:34
【问题描述】:

如果我做一个docker volume ls,我的卷列表是这样的:

DRIVER              VOLUME NAME
local               305eda2bfd9618266093921031e6e341cf3811f2ad2b75dd7af5376d037a566a
local               226197f60c92df08a7a5643f5e94b37947c56bdd4b532d4ee10d4cf21b27b319
...
...
local               209efa69f1679224ab6b2e7dc0d9ec204e3628a1635fa3410c44a4af3056c301

我想一次删除所有卷。我该怎么做?

【问题讨论】:

    标签: docker


    【解决方案1】:

    2017 年编辑: 此答案于 2016 年 4 月 16 日给出,现在已过时,仅适用于 1.13 之前的 docker 版本 请使用@VonC 的答案,现在它被标记为正确

    要删除未使用的卷,您可以使用内置的 docker volume rm 命令。 rm 命令还会删除 /var/lib/docker/volumes 中不是卷的任何目录,因此请确保您没有在其中放置任何要保存的内容:
    列出卷的命令,比你的稍微正确:

    $ docker volume ls -qf dangling=true
    

    清理:

    $ docker volume rm $(docker volume ls -qf dangling=true)
    

    关于ls here的更多细节,关于rm here

    【讨论】:

    • 如果不首先使用--dry-run 参数测试悬空卷列表,我不会运行它。
    • 没有--dry-run 选项。
    • 此答案是您无论如何都想删除所有卷的答案。谢谢!
    【解决方案2】:

    删除所有未使用数据(包括没有容器的卷)的官方命令将使用 docker 1.13

    docker system prune  
    

    如果您只想限制音量,removing only unused volumes:

    docker volume prune
    

    您还有docker image prunedocker container prune等:
    在“Prune unused Docker objects”查看更多信息。

    参见commit 86de7c0PR 26108

    您可以在play-with-docker.com 中看到它的实际效果:

    / # docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    1296a5e47ef3        hello-world         "/hello"            7 seconds ago       Exited (0) 6 seconds ago                       prickly_poincare
    
    / # docker system  prune
    WARNING! This will remove:
            - all stopped containers
            - all volumes not used by at least one container
            - all networks not used by at least one container
            - all dangling images
    Are you sure you want to continue? [y/N] y
    Deleted Containers:
    1296a5e47ef3ab021458c92ad711ad03c7f19dc52f0e353f56f062201aa03a35
    

    当前(docker 1.13 之前)管理卷的方式是通过 PR 14242 and the docker volume command 引入的,该文件从 2015 年 7 月开始记录 in its comment

    docker volume rm $(docker volume ls -q --filter dangling=true)
    

    【讨论】:

    • 修剪命令很棒,但请小心使用它们。似乎他们假设容器在您调用它们时正在运行。它将清除可能相关但未积极使用的事物(例如网络),从而导致现有容器下次启动时出现故障。如果您不确定可能会修剪什么,请提前使用dangling 过滤器:)
    • docker system prune 似乎没有删除本地卷,但docker volume prune 将其整理出来
    【解决方案3】:

    这是我发现有用的:https://github.com/chadoe/docker-cleanup-volumes

    用于删除 /var/lib/docker/volumes 和 /var/lib/docker/vfs/dir 中的孤立 docker 卷的 Shellscript Docker 版本 1.4.1 到 1.11.x

    它基本上会清理任何孤立/悬空的卷,但它包含一个 --dry-run,但它也记录了一些 docker 包含的命令(在上一条评论中引用)

    关于 Docker 1.9 及更高版本的注意事项

    要删除 Docker 1.9 及更高版本中的孤立卷,您还可以使用内置的 docker volume 命令代替此 docker-cleanup-volumes 脚本。内置命令还会删除 /var/lib/docker/volumes 中不是卷的任何目录,因此请确保您没有在其中放置任何要保存的内容:

    列表:

    $ docker volume ls -qf dangling=true
    

    清理:

    $ docker volume rm $(docker volume ls -qf dangling=true)
    

    或者,更好地处理无操作但特定于 Linux:

    $ docker volume ls -qf dangling=true | xargs -r docker volume rm
    

    【讨论】:

      【解决方案4】:

      要回答问题并借用 Marc,这是可行的:

      $ docker volume rm $(docker volume ls -qf dangling=true | xargs)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-30
        • 2019-05-23
        • 2018-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 2018-01-12
        相关资源
        最近更新 更多