إزالة وحدات تخزين البيانات عامل الميناء?

تذكر وثائق عامل الميناء الرسمية أنني بحاجة إلى تشغيل docker rm -v containername لإزالة وحدة تخزين البيانات على وجه التحديد. ولكن ماذا تفعل إذا قمت بالفعل بإزالة جميع الحاويات التي تشير إلى حجم البيانات المحدد ?

في عامل الميناء 1.9 ، هناك القدرة على إدارة وحدات التخزين بشكل أفضل مع docker volume (انظر هذه العلاقات العامة):

$ docker --versionDocker version 1.9.0, build 76d6bc9$ docker volumeUsage:  docker volume [OPTIONS] [COMMAND]Manage Docker volumesCommands:  create                   Create a volume  inspect                  Return low-level information on a volume  ls                       List volumes  rm                       Remove a volumeRun 'docker volume COMMAND --help' for more information on a command  --help=false       Print usage$ docker volume ls -f dangling=trueDRIVER              VOLUME NAMElocal               0490a79a769b8fc96b901ad2b92be9f34516476be5d06da766b4fd8636275330local               sourcelocal               89ecc5c7afc0c004b2eccff55692b842b4394ba12048195b385334ec7b161857local               382a7ea81dd87f773914725d755ffe28110c3f07da5f135d6181bf55b393070alocal               0eef9492e7bf3f4e62fd1195b7284b32dd6f22ac8c99052f6ccf890c3d7a4e3clocal               499d1da8e35ebd51a2217c2ca68272740a6ae85a3d2e29e9abf54163d12f5c56local               da1cb72a3a39991b11992a8d5dbc3167771fb54b8eb41308657151ba934b981flocal               4530c88973639c6a4d6c35e9ee4a0ec48dcdd5767fa377214b4a32644ecb8947local               784d941d6e1c7a89a064f9bbe3f594520174029efcbb792b3285915653801f0flocal               0250901593eecd6321a937fe321e5f88996716035ae51fa60952dcc1c5b8f884local               92aa72c8a82facc0164f88b7216b2699dd4d393f7364ba5b8fd92e217c305d7elocal               b88b70a407cd97cd5dfd0d93860ea620293abfe9090d2237cb88363846bfe8d3local               5206cdf191052df750f6b37e37ce55455a03f6afcc6bfb03c46c8d1c87d5791flocal               88c510defbfc90a98026a88cca556725e60a15ac2ab579084664fa03b529670dlocal               d2538cf892e0f75f37e458e6240b7e31600f93d1fb40eb0190eba669f81e3b12local               e3d3cad4f814edd582b0dad2bfe069f9c69d9cc60b71e32a56690295269cac6elocal               120f36311a4f27497b7b89f22b1e0b7ace2c5e72f23cc1b869c895c37b4ed2dblocal               42b8c7587137d493aac0388487ba745b077d27fb4f05f1d3f892246fef9f82f1local               53dba9646ab87392c5c82768efb6b72a51de26564f0db2cacb790a3dccf846d2

يمكن إزالتها عبر هذا الأمر:

$ docker volume rm $(docker volume ls -qf dangling=true)42b8c7587137d493aac0388487ba745b077d27fb4f05f1d3f892246fef9f82f153dba9646ab87392c5c82768efb6b72a51de26564f0db2cacb790a3dccf846d25206cdf191052df750f6b37e37ce55455a03f6afcc6bfb03c46c8d1c87d5791f88c510defbfc90a98026a88cca556725e60a15ac2ab579084664fa03b529670dd2538cf892e0f75f37e458e6240b7e31600f93d1fb40eb0190eba669f81e3b12e3d3cad4f814edd582b0dad2bfe069f9c69d9cc60b71e32a56690295269cac6e120f36311a4f27497b7b89f22b1e0b7ace2c5e72f23cc1b869c895c37b4ed2db0eef9492e7bf3f4e62fd1195b7284b32dd6f22ac8c99052f6ccf890c3d7a4e3c0490a79a769b8fc96b901ad2b92be9f34516476be5d06da766b4fd8636275330source89ecc5c7afc0c004b2eccff55692b842b4394ba12048195b385334ec7b161857382a7ea81dd87f773914725d755ffe28110c3f07da5f135d6181bf55b393070a499d1da8e35ebd51a2217c2ca68272740a6ae85a3d2e29e9abf54163d12f5c56da1cb72a3a39991b11992a8d5dbc3167771fb54b8eb41308657151ba934b981f4530c88973639c6a4d6c35e9ee4a0ec48dcdd5767fa377214b4a32644ecb8947784d941d6e1c7a89a064f9bbe3f594520174029efcbb792b3285915653801f0f0250901593eecd6321a937fe321e5f88996716035ae51fa60952dcc1c5b8f88492aa72c8a82facc0164f88b7216b2699dd4d393f7364ba5b8fd92e217c305d7eb88b70a407cd97cd5dfd0d93860ea620293abfe9090d2237cb88363846bfe8d3$ docker volume ls -f dangling=trueDRIVER              VOLUME NAME

قبل الإصدار 1.9 ، لم عامل الميناء لا توفر أي وسيلة لإزالة التعلق وحدات التخزين.

إذا كانت هذه المجلدات تأخذ الكثير من مساحة القرص وتريد أن تأخذ الأمور في أيدي الخاصة بك على الرغم من ذلك ، يمكنك حذف وحدات التخزين يدويا عن طريق تحديد أولا تلك التي هي قيد الاستخدام. يمكنك تشغيل docker inspect -f '{{ .Volumes }}' containername للعثور على الموقع في نظام الملفات من وحدات التخزين قيد الاستخدام ، ثم قم بحذف كل شيء باستثناء تلك. إذا كان لديك الكثير من الحاويات ، يمكنك تشغيل for x in $(docker ps -qa | sed '1d'); do docker inspect -f '{{ .Volumes }}' ${x}; done لحلقة من خلال الحاويات وقائمة وحدات التخزين.

والأفضل من ذلك ، يمكنك استخدام البرنامج النصي بيثون هنا، الشرط الأساسي هو تثبيت عميل بايثون أبي لعامل الميناء pip install docker-py

تنظيف الأوامر: اعتبارا من عامل الميناء 1.13 يقدم أوامر التنظيف. لإزالة جميع الحاويات والصور والشبكات والأحجام غير المستخدمة:

docker system prune

أو بشكل فردي:

docker container prune

docker image prune

docker network prune

docker volume prune

استخدام الأمر

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

لمسح وحدات التخزين المتدلية من عامل الميناء 1.9 وما فوق.

لدي عامل الميناء 1.6.

لم يعمل إصدار بايثون بالنسبة لي ، فقد كان يشكو من عدم تطابق إصدار عامل الميناء. إنه لأمر مدهش ، أنه في مثل هذه الأوقات ، لا شيء يتفوق على الطريقة القديمة الجيدة للقيام بالأشياء.

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}

ببساطة إضافة إعلان وظيفة 'فولبورج ()' في الجذر الخاص بك .ملف اللجنة. يجب تشغيل هذه الوظيفة كجذر.