AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 683910
Accepted
p4guru
p4guru
Asked: 2015-04-20 13:06:32 +0800 CST2015-04-20 13:06:32 +0800 CST 2015-04-20 13:06:32 +0800 CST

删除 Docker 数据卷?

  • 772

官方 Docker 文档提到我需要运行docker rm -v containername以专门删除数据卷。但是,如果您已经删除了所有引用特定数据量的容器,您会怎么做?

docker
  • 5 5 个回答
  • 53245 Views

5 个回答

  • Voted
  1. Derek Downey
    2015-11-25T12:26:49+08:002015-11-25T12:26:49+08:00

    在 Docker 1.9 中,可以通过以下方式更好地管理卷docker volume(请参阅此 PR):

    $ docker --version
    Docker version 1.9.0, build 76d6bc9
    
    $ docker volume
    
    Usage:  docker volume [OPTIONS] [COMMAND]
    
    Manage Docker volumes
    
    Commands:
      create                   Create a volume
      inspect                  Return low-level information on a volume
      ls                       List volumes
      rm                       Remove a volume
    
    Run 'docker volume COMMAND --help' for more information on a command
    
      --help=false       Print usage
    
    $ docker volume ls -f dangling=true
    DRIVER              VOLUME NAME
    local               0490a79a769b8fc96b901ad2b92be9f34516476be5d06da766b4fd8636275330
    local               source
    local               89ecc5c7afc0c004b2eccff55692b842b4394ba12048195b385334ec7b161857
    local               382a7ea81dd87f773914725d755ffe28110c3f07da5f135d6181bf55b393070a
    local               0eef9492e7bf3f4e62fd1195b7284b32dd6f22ac8c99052f6ccf890c3d7a4e3c
    local               499d1da8e35ebd51a2217c2ca68272740a6ae85a3d2e29e9abf54163d12f5c56
    local               da1cb72a3a39991b11992a8d5dbc3167771fb54b8eb41308657151ba934b981f
    local               4530c88973639c6a4d6c35e9ee4a0ec48dcdd5767fa377214b4a32644ecb8947
    local               784d941d6e1c7a89a064f9bbe3f594520174029efcbb792b3285915653801f0f
    local               0250901593eecd6321a937fe321e5f88996716035ae51fa60952dcc1c5b8f884
    local               92aa72c8a82facc0164f88b7216b2699dd4d393f7364ba5b8fd92e217c305d7e
    local               b88b70a407cd97cd5dfd0d93860ea620293abfe9090d2237cb88363846bfe8d3
    local               5206cdf191052df750f6b37e37ce55455a03f6afcc6bfb03c46c8d1c87d5791f
    local               88c510defbfc90a98026a88cca556725e60a15ac2ab579084664fa03b529670d
    local               d2538cf892e0f75f37e458e6240b7e31600f93d1fb40eb0190eba669f81e3b12
    local               e3d3cad4f814edd582b0dad2bfe069f9c69d9cc60b71e32a56690295269cac6e
    local               120f36311a4f27497b7b89f22b1e0b7ace2c5e72f23cc1b869c895c37b4ed2db
    local               42b8c7587137d493aac0388487ba745b077d27fb4f05f1d3f892246fef9f82f1
    local               53dba9646ab87392c5c82768efb6b72a51de26564f0db2cacb790a3dccf846d2
    

    这些可以通过以下命令删除:

    $ docker volume rm $(docker volume ls -qf dangling=true)
    42b8c7587137d493aac0388487ba745b077d27fb4f05f1d3f892246fef9f82f1
    53dba9646ab87392c5c82768efb6b72a51de26564f0db2cacb790a3dccf846d2
    5206cdf191052df750f6b37e37ce55455a03f6afcc6bfb03c46c8d1c87d5791f
    88c510defbfc90a98026a88cca556725e60a15ac2ab579084664fa03b529670d
    d2538cf892e0f75f37e458e6240b7e31600f93d1fb40eb0190eba669f81e3b12
    e3d3cad4f814edd582b0dad2bfe069f9c69d9cc60b71e32a56690295269cac6e
    120f36311a4f27497b7b89f22b1e0b7ace2c5e72f23cc1b869c895c37b4ed2db
    0eef9492e7bf3f4e62fd1195b7284b32dd6f22ac8c99052f6ccf890c3d7a4e3c
    0490a79a769b8fc96b901ad2b92be9f34516476be5d06da766b4fd8636275330
    source
    89ecc5c7afc0c004b2eccff55692b842b4394ba12048195b385334ec7b161857
    382a7ea81dd87f773914725d755ffe28110c3f07da5f135d6181bf55b393070a
    499d1da8e35ebd51a2217c2ca68272740a6ae85a3d2e29e9abf54163d12f5c56
    da1cb72a3a39991b11992a8d5dbc3167771fb54b8eb41308657151ba934b981f
    4530c88973639c6a4d6c35e9ee4a0ec48dcdd5767fa377214b4a32644ecb8947
    784d941d6e1c7a89a064f9bbe3f594520174029efcbb792b3285915653801f0f
    0250901593eecd6321a937fe321e5f88996716035ae51fa60952dcc1c5b8f884
    92aa72c8a82facc0164f88b7216b2699dd4d393f7364ba5b8fd92e217c305d7e
    b88b70a407cd97cd5dfd0d93860ea620293abfe9090d2237cb88363846bfe8d3
    
    $ docker volume ls -f dangling=true
    DRIVER              VOLUME NAME
    
    • 66
  2. Best Answer
    Daniel t.
    2015-04-20T13:58:27+08:002015-04-20T13:58:27+08:00

    在 1.9 版之前,Docker 没有提供任何方法来删除悬空卷。

    如果此类卷占用了太多磁盘空间,并且您想自己动手,您可以通过首先识别正在使用的卷来手动删除这些卷。您可以运行docker inspect -f '{{ .Volumes }}' containername以查找正在使用的卷在文件系统中的位置,然后删除除这些之外的所有内容。如果您有很多容器,则可以运行for x in $(docker ps -qa | sed '1d'); do docker inspect -f '{{ .Volumes }}' ${x}; done以遍历容器并列出卷。

    更好的是,你可以在这里使用 Python 脚本,前提是为 Docker 安装 Python API 客户端pip install docker-py

    • 23
  3. 2Fast2BCn
    2017-01-31T11:52:55+08:002017-01-31T11:52:55+08:00

    清理命令:从 docker 1.13 开始引入清理命令。要删除所有未使用的容器、图像、网络和卷:

    docker system prune

    或单独:

    docker container prune

    docker image prune

    docker network prune

    docker volume prune

    • 18
  4. Harish Ambady
    2016-07-08T04:03:20+08:002016-07-08T04:03:20+08:00

    使用命令

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

    从 docker 1.9 及更高版本清除悬空卷。

    • 5
  5. truthadjustr
    2016-06-01T07:53:43+08:002016-06-01T07:53:43+08:00

    我有码头 1.6。

    python 版本对我不起作用,它抱怨 docker 版本不匹配。令人惊讶的是,在这样的时代,没有什么能比得上古老的做事方式。

    volpurge() {
        if [ $(id -u) -ne 0 ];then
            echo "please run as root"
            return 1
        fi
        BASEDIR=/var/lib/docker/vfs/dir
        a=$(mktemp)
        b=$(mktemp)
        c=$(mktemp)
        printf "checking docker volumes ... "
        cd $BASEDIR
        ls -1 | sort -u > $a
        cd -
        tot1=$(wc -l < $a)
        echo "found $tot1 total" 
        printf "inspecting volumes used by existing containers ... "
        for x in $(docker ps -qa | sed '1d');do
            docker inspect -f '{{ .Volumes }}' ${x} | tr ' ' '\n' | cut -d':' -f2 | tr -d ']' | grep $BASEDIR >> $b
        done
        sed -i 's/\/var\/lib\/docker\/vfs\/dir\///g' $b
        sort -u $b > $c
        mv -f $c $b
        tot2=$(wc -l < $b)
        echo "found $tot2 total" 
    
        if [ "$tot1" -gt "$tot2" ];then
            comm -3 $a $b > $c
            tot3=$(wc -l < $c)
            echo "purging $tot3 dangling volumes ... "
            read -p "proceed? [y/n]" decision
            if [ "$decision" = "y" ];then
                while read d;do
                    printf "."
                    rm -rf ${BASEDIR}/$d
                done < $c
            else
                echo "OK. Please examine this manually"
                cat $c
            fi
        else
            echo "nothing to purge"
        fi
        rm -f $a $b $c
    }
    

    只需将 'volpurge()' 函数声明添加到根目录的 .bashrc 文件中。此函数必须以 root 身份运行。

    • 0

相关问题

  • 如何调试 docker 容器初始化?

  • 创建后立即启动 Docker 容器?

  • 如何在不指定命令的情况下在 Docker 容器中运行完整的操作系统?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve