{"id":1798,"date":"2024-02-09T19:48:11","date_gmt":"2024-02-09T19:48:11","guid":{"rendered":"https:\/\/blog.kimi.ee\/?p=1798"},"modified":"2024-02-18T17:21:24","modified_gmt":"2024-02-18T17:21:24","slug":"%e3%80%90%e6%95%99%e7%a8%8b%e3%80%91docker%e4%b8%80%e9%94%ae%e6%89%b9%e9%87%8f%e5%a4%87%e4%bb%bd%e6%81%a2%e5%a4%8d%e8%84%9a%e6%9c%ac","status":"publish","type":"post","link":"https:\/\/blog.kimi.ee\/?p=1798","title":{"rendered":"\u3010\u5907\u4efd\u3011Docker\u4e00\u952e\u6279\u91cf\u5907\u4efd\u6062\u590d\u811a\u672c"},"content":{"rendered":"\n<p>\u811a\u672c\u5206\u4e3a\u4e24\u6b65\u9aa4\uff0c\u4e00\u4e2a\u662f\u5907\u4efd\uff0c\u4e00\u4e2a\u662f\u6062\u590d<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_62 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title \" >\u3010 \u76ee \u5f55 \u3011 -  \u70b9\u51fb\u4e0b\u65b9\u6807\u9898\u8df3\u8f6c <\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #cecece;color:#cecece\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #cecece;color:#cecece\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#%E5%A4%87%E4%BB%BD\" title=\"\u5907\u4efd\">\u5907\u4efd<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#1%E6%89%93%E5%BC%80%E7%BB%88%E7%AB%AF%EF%BC%8C%E6%96%B0%E5%BB%BA%E5%A4%87%E4%BB%BD%E7%9B%AE%E5%BD%95backup_%EF%BC%8C%E5%B9%B6%E7%BB%99%E6%9D%83%E9%99%90\" title=\"1.\u6253\u5f00\u7ec8\u7aef\uff0c\u65b0\u5efa\u5907\u4efd\u76ee\u5f55\/backup \uff0c\u5e76\u7ed9\u6743\u9650\">1.\u6253\u5f00\u7ec8\u7aef\uff0c\u65b0\u5efa\u5907\u4efd\u76ee\u5f55\/backup \uff0c\u5e76\u7ed9\u6743\u9650<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#2%E6%96%B0%E5%BB%BA%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%90%8D%E5%AD%97%E4%B8%BAbackupsh_%EF%BC%8C%E7%B2%98%E8%B4%B4%E4%BB%A5%E4%B8%8B%E5%86%85%E5%AE%B9_%EF%BC%88%E8%84%9A%E6%9C%AC%E6%98%AFAI%E5%86%99%E7%9A%84%EF%BC%89\" title=\"2.\u65b0\u5efa\u5907\u4efd\u811a\u672c\uff0c\u540d\u5b57\u4e3abackup.sh \uff0c\u7c98\u8d34\u4ee5\u4e0b\u5185\u5bb9 \uff08\u811a\u672c\u662fAI\u5199\u7684\uff09\">2.\u65b0\u5efa\u5907\u4efd\u811a\u672c\uff0c\u540d\u5b57\u4e3abackup.sh \uff0c\u7c98\u8d34\u4ee5\u4e0b\u5185\u5bb9 \uff08\u811a\u672c\u662fAI\u5199\u7684\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#3%E5%9B%9E%E5%88%B0%E7%BB%88%E7%AB%AF%EF%BC%8C%E8%BE%93%E5%85%A5%E4%BB%A5%E4%B8%8B%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%BC%80%E5%A7%8B%E5%A4%87%E4%BB%BD\" title=\"3.\u56de\u5230\u7ec8\u7aef\uff0c\u8f93\u5165\u4ee5\u4e0b\u4ee3\u7801\u8fd0\u884c\u811a\u672c\uff0c\u5f00\u59cb\u5907\u4efd\">3.\u56de\u5230\u7ec8\u7aef\uff0c\u8f93\u5165\u4ee5\u4e0b\u4ee3\u7801\u8fd0\u884c\u811a\u672c\uff0c\u5f00\u59cb\u5907\u4efd<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#4%E5%B0%8F%E9%9B%85%E9%9C%80%E8%A6%81%E5%A4%87%E4%BB%BDtoken%EF%BC%8C%E5%9C%A8%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E5%A4%B9%E5%86%85%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6xiaoya_backupsh%EF%BC%8C%E7%B2%98%E8%B4%B4%E4%BB%A5%E4%B8%8B%E5%86%85%E5%AE%B9%EF%BC%9A%EF%BC%88%E8%AF%A5%E8%84%9A%E6%9C%AC%E9%9B%86%E5%A4%87%E4%BB%BD%E6%81%A2%E5%A4%8D%E4%B8%BA%E4%B8%80%E4%BD%93%EF%BC%89\" title=\"4.\u5c0f\u96c5\u9700\u8981\u5907\u4efdtoken\uff0c\u5728\u4efb\u610f\u6587\u4ef6\u5939\u5185\u65b0\u5efa\u6587\u4ef6xiaoya_backup.sh\uff0c\u7c98\u8d34\u4ee5\u4e0b\u5185\u5bb9\uff1a\uff08\u8be5\u811a\u672c\u96c6\u5907\u4efd+\u6062\u590d\u4e3a\u4e00\u4f53\uff09\">4.\u5c0f\u96c5\u9700\u8981\u5907\u4efdtoken\uff0c\u5728\u4efb\u610f\u6587\u4ef6\u5939\u5185\u65b0\u5efa\u6587\u4ef6xiaoya_backup.sh\uff0c\u7c98\u8d34\u4ee5\u4e0b\u5185\u5bb9\uff1a\uff08\u8be5\u811a\u672c\u96c6\u5907\u4efd+\u6062\u590d\u4e3a\u4e00\u4f53\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#5%E7%BB%88%E7%AB%AF%E8%BE%93%E5%85%A5bash_xiaoya_backupsh_%E6%89%A7%E8%A1%8C%EF%BC%8C%E8%AF%A5%E8%84%9A%E6%9C%AC%E4%BC%9A%E5%A4%87%E4%BB%BDetcxiaoya%E7%9B%AE%E5%BD%95%E4%B8%8B%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%88%B0%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B\" title=\"5.\u7ec8\u7aef\u8f93\u5165bash xiaoya_backup.sh \u6267\u884c\uff0c\u8be5\u811a\u672c\u4f1a\u5907\u4efd\/etc\/xiaoya\u76ee\u5f55\u4e0b\u6240\u6709\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55\u4e0b\">5.\u7ec8\u7aef\u8f93\u5165bash xiaoya_backup.sh \u6267\u884c\uff0c\u8be5\u811a\u672c\u4f1a\u5907\u4efd\/etc\/xiaoya\u76ee\u5f55\u4e0b\u6240\u6709\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55\u4e0b<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#6%E7%94%9F%E6%88%90%E7%9A%84%E5%A4%87%E4%BB%BD%E6%96%87%E4%BB%B6%E4%B8%BAxiaoya_backuptar_%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E6%9C%89%E8%BF%99%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%8C%E8%84%9A%E6%9C%AC%E4%BC%9A%E8%87%AA%E5%8A%A8%E8%A7%A3%E5%8E%8B%E7%BC%A9token%E6%96%87%E4%BB%B6%E5%88%B0%E5%AF%B9%E5%BA%94%E7%9B%AE%E5%BD%95\" title=\"6.\u751f\u6210\u7684\u5907\u4efd\u6587\u4ef6\u4e3axiaoya_backup.tar \uff0c\u5982\u679c\u5f53\u524d\u76ee\u5f55\u4e0b\u6709\u8fd9\u4e2a\u6587\u4ef6\uff0c\u811a\u672c\u4f1a\u81ea\u52a8\u89e3\u538b\u7f29token\u6587\u4ef6\u5230\u5bf9\u5e94\u76ee\u5f55\">6.\u751f\u6210\u7684\u5907\u4efd\u6587\u4ef6\u4e3axiaoya_backup.tar \uff0c\u5982\u679c\u5f53\u524d\u76ee\u5f55\u4e0b\u6709\u8fd9\u4e2a\u6587\u4ef6\uff0c\u811a\u672c\u4f1a\u81ea\u52a8\u89e3\u538b\u7f29token\u6587\u4ef6\u5230\u5bf9\u5e94\u76ee\u5f55<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#%E6%81%A2%E5%A4%8D\" title=\"\u6062\u590d\">\u6062\u590d<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#%E9%99%84%EF%BC%9A%E5%A4%87%E4%BB%BD%E3%80%81%E6%81%A2%E5%A4%8D%E8%84%9A%E6%9C%AC%E7%9A%84%E6%B3%A8%E9%87%8A\" title=\"\u9644\uff1a\u5907\u4efd\u3001\u6062\u590d\u811a\u672c\u7684\u6ce8\u91ca\">\u9644\uff1a\u5907\u4efd\u3001\u6062\u590d\u811a\u672c\u7684\u6ce8\u91ca<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blog.kimi.ee\/?p=1798\/#%E5%A4%87%E4%BB%BD%E6%96%B9%E6%B3%952\" title=\"\u5907\u4efd\u65b9\u6cd52\">\u5907\u4efd\u65b9\u6cd52<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%A4%87%E4%BB%BD\"><\/span>\u5907\u4efd<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u5907\u4efd\u6d41\u7a0b\u5982\u4e0b<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1%E6%89%93%E5%BC%80%E7%BB%88%E7%AB%AF%EF%BC%8C%E6%96%B0%E5%BB%BA%E5%A4%87%E4%BB%BD%E7%9B%AE%E5%BD%95backup_%EF%BC%8C%E5%B9%B6%E7%BB%99%E6%9D%83%E9%99%90\"><\/span>1.\u6253\u5f00\u7ec8\u7aef\uff0c\u65b0\u5efa\u5907\u4efd\u76ee\u5f55\/backup \uff0c\u5e76\u7ed9\u6743\u9650<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"mkdir \/backup &amp; chmod -R 777 \/backup\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">mkdir <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">backup <\/span><span style=\"color: #F47067\">&amp;<\/span><span style=\"color: #ADBAC7\"> chmod <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #6CB6FF\">R<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">777<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">backup<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2%E6%96%B0%E5%BB%BA%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%90%8D%E5%AD%97%E4%B8%BAbackupsh_%EF%BC%8C%E7%B2%98%E8%B4%B4%E4%BB%A5%E4%B8%8B%E5%86%85%E5%AE%B9_%EF%BC%88%E8%84%9A%E6%9C%AC%E6%98%AFAI%E5%86%99%E7%9A%84%EF%BC%89\"><\/span>2.\u65b0\u5efa\u5907\u4efd\u811a\u672c\uff0c\u540d\u5b57\u4e3abackup.sh \uff0c\u7c98\u8d34\u4ee5\u4e0b\u5185\u5bb9 \uff08\u811a\u672c\u662fAI\u5199\u7684\uff09<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\necho &quot;\u5f00\u59cb\u5907\u4efd...&quot;\ndocker ps -a --format '{{.Names}}' | while read container; do\n    echo &quot;\u6b63\u5728\u5907\u4efd $container ...&quot;\n    docker commit &quot;$container&quot; &quot;$container&quot;\n    docker save &quot;$container&quot; &gt; &quot;\/backup\/$container.tar&quot;\n    volumes=$(docker inspect --format='{{range .Mounts}}{{println .Name .Destination}}{{end}}' $container)\n    echo &quot;$volumes&quot; | while read volume destination; do\n        if [ -n &quot;$volume&quot; ]; then\n            echo &quot;\u6b63\u5728\u5907\u4efd $container \u7684\u6570\u636e\u5377 $volume ...&quot;\n            docker run --rm --volumes-from &quot;$container&quot; -v \/backup:\/backup ubuntu tar cvf &quot;\/backup\/${container}_data.tar&quot; &quot;$destination&quot;\n            echo &quot;\u5907\u4efd $container \u7684\u6570\u636e\u5377 $volume \u5b8c\u6210.&quot;\n        fi\n    done\n    echo &quot;\u5907\u4efd $container \u5b8c\u6210.&quot;\n    docker inspect $container &gt; &quot;\/backup\/$container.json&quot;\ndone\necho &quot;\u6240\u6709\u5bb9\u5668\u5907\u4efd\u5b8c\u6210.&quot;\n\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #768390\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #96D0FF\">&quot;\u5f00\u59cb\u5907\u4efd...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">docker ps <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">a <\/span><span style=\"color: #F47067\">--<\/span><span style=\"color: #ADBAC7\">format <\/span><span style=\"color: #96D0FF\">&#39;{{.Names}}&#39;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">|<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">while<\/span><span style=\"color: #ADBAC7\"> read container; <\/span><span style=\"color: #F47067\">do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;\u6b63\u5728\u5907\u4efd $container ...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    docker commit <\/span><span style=\"color: #96D0FF\">&quot;$container&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;$container&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    docker save <\/span><span style=\"color: #96D0FF\">&quot;$container&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\/backup\/$container.tar&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    volumes<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #DCBDFB\">$<\/span><span style=\"color: #ADBAC7\">(docker inspect <\/span><span style=\"color: #F47067\">--<\/span><span style=\"color: #ADBAC7\">format<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&#39;{{range .Mounts}}{{println .Name .Destination}}{{end}}&#39;<\/span><span style=\"color: #ADBAC7\"> $container)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;$volumes&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">|<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">while<\/span><span style=\"color: #ADBAC7\"> read volume destination; <\/span><span style=\"color: #F47067\">do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> [ <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">n <\/span><span style=\"color: #96D0FF\">&quot;$volume&quot;<\/span><span style=\"color: #ADBAC7\"> ]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            echo <\/span><span style=\"color: #96D0FF\">&quot;\u6b63\u5728\u5907\u4efd $container \u7684\u6570\u636e\u5377 $volume ...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            docker run <\/span><span style=\"color: #F47067\">--<\/span><span style=\"color: #ADBAC7\">rm <\/span><span style=\"color: #F47067\">--<\/span><span style=\"color: #ADBAC7\">volumes<\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">from <\/span><span style=\"color: #96D0FF\">&quot;$container&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">v <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #F69D50\">backup<\/span><span style=\"color: #ADBAC7\">:<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">backup ubuntu tar cvf <\/span><span style=\"color: #96D0FF\">&quot;\/backup\/${container}_data.tar&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;$destination&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            echo <\/span><span style=\"color: #96D0FF\">&quot;\u5907\u4efd $container \u7684\u6570\u636e\u5377 $volume \u5b8c\u6210.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        fi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;\u5907\u4efd $container \u5b8c\u6210.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    docker inspect $container <\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\/backup\/$container.json&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #96D0FF\">&quot;\u6240\u6709\u5bb9\u5668\u5907\u4efd\u5b8c\u6210.&quot;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3%E5%9B%9E%E5%88%B0%E7%BB%88%E7%AB%AF%EF%BC%8C%E8%BE%93%E5%85%A5%E4%BB%A5%E4%B8%8B%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%BC%80%E5%A7%8B%E5%A4%87%E4%BB%BD\"><\/span>3.\u56de\u5230\u7ec8\u7aef\uff0c\u8f93\u5165\u4ee5\u4e0b\u4ee3\u7801\u8fd0\u884c\u811a\u672c\uff0c\u5f00\u59cb\u5907\u4efd<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"bash backup.sh\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">bash backup.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u6587\u4ef6\u5939\u5185\u4f1a\u51fa\u73b03\u7c7b\u6587\u4ef6<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"258\" height=\"68\" src=\"https:\/\/blog.kimi.ee\/wp-content\/uploads\/image-187.png\" alt=\"\" class=\"wp-image-1799\"\/><\/figure>\n\n\n\n<p>json\u662f\u7531docker inspect\u751f\u6210\u7684\u8be5\u5bb9\u5668\u7684\u914d\u7f6e<\/p>\n\n\n\n<p>tar\u662f\u955c\u50cf<\/p>\n\n\n\n<p>_data.tar\u662f\u5bb9\u5668\u6570\u636e\u5377\u7684\u6570\u636e<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4%E5%B0%8F%E9%9B%85%E9%9C%80%E8%A6%81%E5%A4%87%E4%BB%BDtoken%EF%BC%8C%E5%9C%A8%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E5%A4%B9%E5%86%85%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6xiaoya_backupsh%EF%BC%8C%E7%B2%98%E8%B4%B4%E4%BB%A5%E4%B8%8B%E5%86%85%E5%AE%B9%EF%BC%9A%EF%BC%88%E8%AF%A5%E8%84%9A%E6%9C%AC%E9%9B%86%E5%A4%87%E4%BB%BD%E6%81%A2%E5%A4%8D%E4%B8%BA%E4%B8%80%E4%BD%93%EF%BC%89\"><\/span>4.\u5c0f\u96c5\u9700\u8981\u5907\u4efdtoken\uff0c\u5728\u4efb\u610f\u6587\u4ef6\u5939\u5185\u65b0\u5efa\u6587\u4ef6xiaoya_backup.sh\uff0c\u7c98\u8d34\u4ee5\u4e0b\u5185\u5bb9\uff1a\uff08\u8be5\u811a\u672c\u96c6\u5907\u4efd+\u6062\u590d\u4e3a\u4e00\u4f53\uff09<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\n\n# \u68c0\u67e5 \/etc\/xiaoya \u76ee\u5f55\u662f\u5426\u5b58\u5728\nif [ -d \/etc\/xiaoya ]; then\n  echo &quot;\u76ee\u5f55 \/etc\/xiaoya \u5df2\u5b58\u5728\u3002&quot;\n\n  # \u5c06 \/etc\/xiaoya \u76ee\u5f55\u4e0b\u7684\u6240\u6709\u6587\u4ef6\u6253\u5305\n  echo &quot;\u6b63\u5728\u6253\u5305 \/etc\/xiaoya \u76ee\u5f55...&quot;\n  tar -cf xiaoya_backup.tar -C \/etc xiaoya\n\n  # \u663e\u793a\u6253\u5305\u4fe1\u606f\n  echo &quot;\u6253\u5305\u5b8c\u6210\uff0c\u538b\u7f29\u5305\u540d\u4e3a xiaoya_backup.tar\u3002&quot;\n  echo &quot;\u538b\u7f29\u5305\u4fdd\u5b58\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u3002&quot;\n\nelse\n  echo &quot;\u76ee\u5f55 \/etc\/xiaoya \u4e0d\u5b58\u5728\u3002&quot;\n\n  # \u521b\u5efa \/etc\/xiaoya \u76ee\u5f55\n  echo &quot;\u6b63\u5728\u521b\u5efa\u76ee\u5f55 \/etc\/xiaoya...&quot;\n  mkdir \/etc\/xiaoya\n\n  # \u8bbe\u7f6e \/etc\/xiaoya \u76ee\u5f55\u6743\u9650\n  echo &quot;\u6b63\u5728\u8bbe\u7f6e\u76ee\u5f55 \/etc\/xiaoya \u7684\u6743\u9650...&quot;\n  chmod 755 \/etc\/xiaoya\n\n  # \u89e3\u538b\u7f29 xiaoya_backup.tar \u5230 \/etc\/xiaoya \u76ee\u5f55\n  echo &quot;\u6b63\u5728\u89e3\u538b\u7f29 xiaoya_backup.tar \u5230\u76ee\u5f55 \/etc\/xiaoya...&quot;\n  tar -xf xiaoya_backup.tar -C \/etc\/xiaoya\n\n  # \u663e\u793a\u89e3\u538b\u7f29\u4fe1\u606f\n  echo &quot;\u89e3\u538b\u7f29\u5b8c\u6210\u3002&quot;\nfi\n\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #768390\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"># \u68c0\u67e5 <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya \u76ee\u5f55\u662f\u5426\u5b58\u5728<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> [ <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">d <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya ]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u76ee\u5f55 \/etc\/xiaoya \u5df2\u5b58\u5728\u3002&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  # \u5c06 <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya \u76ee\u5f55\u4e0b\u7684\u6240\u6709\u6587\u4ef6\u6253\u5305<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u6b63\u5728\u6253\u5305 \/etc\/xiaoya \u76ee\u5f55...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  tar <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">cf xiaoya_backup.tar <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #6CB6FF\">C<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc xiaoya<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  # \u663e\u793a\u6253\u5305\u4fe1\u606f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u6253\u5305\u5b8c\u6210\uff0c\u538b\u7f29\u5305\u540d\u4e3a xiaoya_backup.tar\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u538b\u7f29\u5305\u4fdd\u5b58\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u3002&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u76ee\u5f55 \/etc\/xiaoya \u4e0d\u5b58\u5728\u3002&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  # \u521b\u5efa <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya \u76ee\u5f55<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u6b63\u5728\u521b\u5efa\u76ee\u5f55 \/etc\/xiaoya...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  mkdir <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  # \u8bbe\u7f6e <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya \u76ee\u5f55\u6743\u9650<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u6b63\u5728\u8bbe\u7f6e\u76ee\u5f55 \/etc\/xiaoya \u7684\u6743\u9650...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  chmod <\/span><span style=\"color: #6CB6FF\">755<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  # \u89e3\u538b\u7f29 xiaoya_backup.tar \u5230 <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya \u76ee\u5f55<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u6b63\u5728\u89e3\u538b\u7f29 xiaoya_backup.tar \u5230\u76ee\u5f55 \/etc\/xiaoya...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  tar <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">xf xiaoya_backup.tar <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #6CB6FF\">C<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">etc<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">xiaoya<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  # \u663e\u793a\u89e3\u538b\u7f29\u4fe1\u606f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo <\/span><span style=\"color: #96D0FF\">&quot;\u89e3\u538b\u7f29\u5b8c\u6210\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">fi<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5%E7%BB%88%E7%AB%AF%E8%BE%93%E5%85%A5bash_xiaoya_backupsh_%E6%89%A7%E8%A1%8C%EF%BC%8C%E8%AF%A5%E8%84%9A%E6%9C%AC%E4%BC%9A%E5%A4%87%E4%BB%BDetcxiaoya%E7%9B%AE%E5%BD%95%E4%B8%8B%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%88%B0%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B\"><\/span>5.\u7ec8\u7aef\u8f93\u5165bash xiaoya_backup.sh \u6267\u884c\uff0c\u8be5\u811a\u672c\u4f1a\u5907\u4efd\/etc\/xiaoya\u76ee\u5f55\u4e0b\u6240\u6709\u6587\u4ef6\u5230\u5f53\u524d\u76ee\u5f55\u4e0b<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"6%E7%94%9F%E6%88%90%E7%9A%84%E5%A4%87%E4%BB%BD%E6%96%87%E4%BB%B6%E4%B8%BAxiaoya_backuptar_%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E6%9C%89%E8%BF%99%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%8C%E8%84%9A%E6%9C%AC%E4%BC%9A%E8%87%AA%E5%8A%A8%E8%A7%A3%E5%8E%8B%E7%BC%A9token%E6%96%87%E4%BB%B6%E5%88%B0%E5%AF%B9%E5%BA%94%E7%9B%AE%E5%BD%95\"><\/span>6.\u751f\u6210\u7684\u5907\u4efd\u6587\u4ef6\u4e3axiaoya_backup.tar \uff0c\u5982\u679c\u5f53\u524d\u76ee\u5f55\u4e0b\u6709\u8fd9\u4e2a\u6587\u4ef6\uff0c\u811a\u672c\u4f1a\u81ea\u52a8\u89e3\u538b\u7f29token\u6587\u4ef6\u5230\u5bf9\u5e94\u76ee\u5f55<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%81%A2%E5%A4%8D\"><\/span>\u6062\u590d<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>1.\u5982\u679c\u5728\u65b0\u673a\u5668\u4e0a\uff0c\u9996\u5148\u9700\u8981\u5b89\u88c5docker<\/p>\n\n\n\n<p>2.portainer\u7ba1\u7406\u5bb9\u5668\u9700\u8981\u63d0\u524d\u624b\u52a8\u6062\u590d\uff0chub\u7684\u5730\u5740\uff1a<a href=\"https:\/\/hub.docker.com\/r\/6053537\/portainer-ce\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/hub.docker.com\/r\/6053537\/portainer-ce<\/a><\/p>\n\n\n\n<p>3.\u628a\u5907\u4efd\u597d\u7684\u6587\u4ef6\u62f7\u8d1d\u5230\u5f85\u6062\u590d\u7684\u673a\u5668\u4e0a\u7684\/backup\u76ee\u5f55\u4e0b<\/p>\n\n\n\n<p>4.\u65b0\u5efa\u6587\u4ef6restore.sh\uff0c\u5e76\u7c98\u8d34\u4ee5\u4e0b\u5185\u5bb9\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\necho &quot;\u5f00\u59cb\u6062\u590d...&quot;\nfor file in \/backup\/*.tar; do\n    if [[ $file == *&quot;_data.tar&quot; ]]; then\n        container=$(basename &quot;$file&quot; _data.tar)\n        echo &quot;\u6b63\u5728\u6062\u590d $container \u7684\u6570\u636e\u5377...&quot;\n        docker run --rm --volumes-from &quot;$container&quot; -v \/backup:\/backup ubuntu tar xvf &quot;$file&quot;\n        echo &quot;\u6062\u590d $container \u7684\u6570\u636e\u5377\u5b8c\u6210.&quot;\n    else\n        container=$(basename &quot;$file&quot; .tar)\n        echo &quot;\u6b63\u5728\u6062\u590d $container ...&quot;\n        docker load &lt; &quot;$file&quot;\n        echo &quot;\u6062\u590d $container \u5b8c\u6210.&quot;\n    fi\ndone\nfor file in \/backup\/*.json; do\n    container=$(basename &quot;$file&quot; .json)\n    echo &quot;\u6b63\u5728\u6062\u590d $container \u7684\u914d\u7f6e...&quot;\n    config=$(jq -r '.[0] | &quot;-d --name &quot; + .Name + &quot; --network &quot; + .HostConfig.NetworkMode + &quot; &quot; + (.Config.Env | map(&quot; -e &quot; + .) | join(&quot;&quot;)) + &quot; &quot; + (.HostConfig.PortBindings | to_entries | map(&quot; -p &quot; + .value[0].HostIp + &quot;:&quot; + .value[0].HostPort + &quot;:&quot; + .key) | join(&quot;&quot;)) + &quot; &quot; + .Config.Image' $file)\n    docker run $config\n    echo &quot;\u6062\u590d $container \u7684\u914d\u7f6e\u5b8c\u6210.&quot;\ndone\nfor file in \/backup\/*_data.tar; do\n    container=$(basename &quot;$file&quot; _data.tar)\n    echo &quot;\u6b63\u5728\u8986\u76d6 $container \u7684\u6570\u636e\u5377...&quot;\n    docker run --rm --volumes-from &quot;$container&quot; -v \/backup:\/backup ubuntu bash -c &quot;cd \/ &amp;&amp; tar xvf \/backup\/${container}_data.tar&quot;\n    echo &quot;\u8986\u76d6 $container \u7684\u6570\u636e\u5377\u5b8c\u6210.&quot;\ndone\necho &quot;\u6240\u6709\u5bb9\u5668\u6062\u590d\u5b8c\u6210.&quot;\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #768390\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #96D0FF\">&quot;\u5f00\u59cb\u6062\u590d...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">for file <\/span><span style=\"color: #F47067\">in<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">backup<\/span><span style=\"color: #768390\">\/*.tar; do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    if [[ $file == *&quot;_data.tar&quot; ]]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">        container=$(basename &quot;$file&quot; _data.tar)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">        echo &quot;\u6b63\u5728\u6062\u590d $container \u7684\u6570\u636e\u5377...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">        docker run --rm --volumes-from &quot;$container&quot; -v \/backup:\/backup ubuntu tar xvf &quot;$file&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">        echo &quot;\u6062\u590d $container \u7684\u6570\u636e\u5377\u5b8c\u6210.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">        container=$(basename &quot;$file&quot; .tar)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">        echo &quot;\u6b63\u5728\u6062\u590d $container ...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">        docker load &lt; &quot;$file&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">        echo &quot;\u6062\u590d $container \u5b8c\u6210.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    fi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">for file in \/backup\/*.json; do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    container=$(basename &quot;$file&quot; .json)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    echo &quot;\u6b63\u5728\u6062\u590d $container \u7684\u914d\u7f6e...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    config=$(jq -r &#39;.[0] | &quot;-d --name &quot; + .Name + &quot; --network &quot; + .HostConfig.NetworkMode + &quot; &quot; + (.Config.Env | map(&quot; -e &quot; + .) | join(&quot;&quot;)) + &quot; &quot; + (.HostConfig.PortBindings | to_entries | map(&quot; -p &quot; + .value[0].HostIp + &quot;:&quot; + .value[0].HostPort + &quot;:&quot; + .key) | join(&quot;&quot;)) + &quot; &quot; + .Config.Image&#39; $file)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    docker run $config<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    echo &quot;\u6062\u590d $container \u7684\u914d\u7f6e\u5b8c\u6210.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">for file in \/backup\/*_data.tar; do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    container=$(basename &quot;$file&quot; _data.tar)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    echo &quot;\u6b63\u5728\u8986\u76d6 $container \u7684\u6570\u636e\u5377...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    docker run --rm --volumes-from &quot;$container&quot; -v \/backup:\/backup ubuntu bash -c &quot;cd \/ &amp;&amp; tar xvf \/backup\/${container}_data.tar&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">    echo &quot;\u8986\u76d6 $container \u7684\u6570\u636e\u5377\u5b8c\u6210.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #768390\">echo &quot;\u6240\u6709\u5bb9\u5668\u6062\u590d\u5b8c\u6210.&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>5.\u4fdd\u5b58\u540e\uff0c\u5728\u7ec8\u7aef\u6267\u884c\u547d\u4ee4\u5f00\u59cb\u6062\u590d\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"bash restore.sh\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">bash restore.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>6.\u6062\u590d\u540e\uff0cdocker\u9700\u8981\u91cd\u542f\uff0c\u6267\u884c\u547d\u4ee4<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"systemctl restart docker\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">systemctl restart docker<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>7.\u90e8\u5206docker\u5bb9\u5668\u65e0\u6cd5\u81ea\u52a8\u6062\u590d\uff0c\u9700\u8981\u624b\u52a8\u6062\u590d\uff0c\u4f8b\u5982\u5c0f\u96c5xiaoya\uff08<a href=\"https:\/\/xiaoyaliu.notion.site\/xiaoya-docker-69404af849504fa5bcf9f2dd5ecaa75f\" target=\"_blank\" rel=\"noreferrer noopener\">\u8be6\u7ec6\u7684\u914d\u7f6e\u6307\u5357\u8bf7\u70b9\u51fb\u6253\u5f00<\/a> \uff09\uff0c\u6062\u590d\u524d\u9700\u8981\u5c06\u4e0a\u6587\u5907\u4efd\u7684xiaoya\u7684token\u5907\u4efd\u6587\u4ef6xiaoya_token_backup.tar\u8ddfxiaoya_backup.sh\u590d\u5236\u5728\u540c\u4e2a\u76ee\u5f55\uff0c\u7136\u540e\u8f93\u5165\u4ee5\u4e0b\u6267\u884c\u6062\u590d\u5c0f\u96c5token\u6587\u4ef6<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"bash xiaoya_backup.sh\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">bash xiaoya_backup.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>8.\u6062\u590d\u5b8ctoken\u540e\u518d\uff0c\u53c2\u8003 <a href=\"https:\/\/xiaoyaliu.notion.site\/xiaoya-docker-69404af849504fa5bcf9f2dd5ecaa75f\" target=\"_blank\" rel=\"noreferrer noopener\">\u8be6\u7ec6\u7684\u914d\u7f6e\u6307\u5357<\/a> \u624b\u52a8\u6062\u590d\u5c0f\u96c5xiaoya<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\u4e00\u952e\u5b89\u88c5\u548c\u66f4\u65b0\u5bb9\u5668\uff0c\u6807\u51c6\u6a21\u5f0f\uff0c\u6253\u5f00\u7aef\u53e3 5678\nbash -c &quot;$(curl http:\/\/docker.xiaoya.pro\/update_new.sh)&quot;\n\u4e00\u952e\u5b89\u88c5\u548c\u66f4\u65b0\u5bb9\u5668\uff0chost\u6a21\u5f0f\uff08\u63a8\u8350\uff0c\u8f6f\u8def\u7531\u548cNAS\u4e0a\u66f4\u5c11\u7f51\u7edc\u6545\u969c\uff0c\u6253\u5f00\u7aef\u53e3 5678\uff09\nbash -c &quot;$(curl http:\/\/docker.xiaoya.pro\/update_new.sh)&quot; -s host\nwebdav \u8d26\u53f7\u5bc6\u7801\n\u7528\u6237: guest \u5bc6\u7801: guest_Api789\n\u91cd\u542f\u5c31\u4f1a\u81ea\u52a8\u66f4\u65b0\u6570\u636e\u5e93\u53ca\u641c\u7d22\u7d22\u5f15\u6587\u4ef6\ndocker restart xiaoya\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">\u4e00\u952e\u5b89\u88c5\u548c\u66f4\u65b0\u5bb9\u5668\uff0c\u6807\u51c6\u6a21\u5f0f\uff0c\u6253\u5f00\u7aef\u53e3 <\/span><span style=\"color: #6CB6FF\">5678<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">bash <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">c <\/span><span style=\"color: #96D0FF\">&quot;$(curl http:\/\/docker.xiaoya.pro\/update_new.sh)&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u4e00\u952e\u5b89\u88c5\u548c\u66f4\u65b0\u5bb9\u5668\uff0chost\u6a21\u5f0f\uff08\u63a8\u8350\uff0c\u8f6f\u8def\u7531\u548cNAS\u4e0a\u66f4\u5c11\u7f51\u7edc\u6545\u969c\uff0c\u6253\u5f00\u7aef\u53e3 <\/span><span style=\"color: #6CB6FF\">5678<\/span><span style=\"color: #ADBAC7\">\uff09<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">bash <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">c <\/span><span style=\"color: #96D0FF\">&quot;$(curl http:\/\/docker.xiaoya.pro\/update_new.sh)&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">s host<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">webdav \u8d26\u53f7\u5bc6\u7801<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">\u7528\u6237<\/span><span style=\"color: #ADBAC7\">: guest <\/span><span style=\"color: #F69D50\">\u5bc6\u7801<\/span><span style=\"color: #ADBAC7\">: guest_Api789<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">\u91cd\u542f\u5c31\u4f1a\u81ea\u52a8\u66f4\u65b0\u6570\u636e\u5e93\u53ca\u641c\u7d22\u7d22\u5f15\u6587\u4ef6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">docker restart xiaoya<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>9.\u5c0f\u96c5keeper\u6e05\u7406\u7f13\u5b58\u547d\u4ee4<\/p>\n\n\n\n<p>\u6bcf\u5929\u81ea\u52a8\u6e05\u7406\u4e00\u6b21\u3002\u5982\u679c\u7cfb\u7edf\u91cd\u542f\u9700\u8981\u624b\u52a8\u91cd\u65b0\u8fd0\u884c\u6216\u628a\u547d\u4ee4\u52a0\u5165\u7cfb\u7edf\u542f\u52a8\u3002<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"bash -c &quot;$(curl -s https:\/\/xiaoyahelper.zengge99.eu.org\/aliyun_clear.sh | tail -n +2)&quot; -s 3 -tg\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">bash <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">c <\/span><span style=\"color: #96D0FF\">&quot;$(curl -s https:\/\/xiaoyahelper.zengge99.eu.org\/aliyun_clear.sh | tail -n +2)&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">s <\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">tg<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E9%99%84%EF%BC%9A%E5%A4%87%E4%BB%BD%E3%80%81%E6%81%A2%E5%A4%8D%E8%84%9A%E6%9C%AC%E7%9A%84%E6%B3%A8%E9%87%8A\"><\/span>\u9644\uff1a\u5907\u4efd\u3001\u6062\u590d\u811a\u672c\u7684\u6ce8\u91ca<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>\u5907\u4efd\u811a\u672c<\/strong>\uff1a<\/p>\n\n\n\n<ol>\n<li>\u5217\u51fa\u6240\u6709\u7684 Docker \u5bb9\u5668\u3002<\/li>\n\n\n\n<li>\u5bf9\u6bcf\u4e2a\u5bb9\u5668\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a\n<ul>\n<li>\u4f7f\u7528&nbsp;<code>docker commit<\/code>&nbsp;\u547d\u4ee4\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u955c\u50cf\uff0c\u8be5\u955c\u50cf\u7684\u72b6\u6001\u4e0e\u5f53\u524d\u8fd0\u884c\u7684\u5bb9\u5668\u76f8\u540c\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>docker save<\/code>&nbsp;\u547d\u4ee4\u5c06\u65b0\u521b\u5efa\u7684\u955c\u50cf\u4fdd\u5b58\u4e3a tar \u6587\u4ef6\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>docker inspect<\/code>&nbsp;\u547d\u4ee4\u83b7\u53d6\u5bb9\u5668\u7684\u6240\u6709\u6570\u636e\u5377\u548c\u5b83\u4eec\u5728\u5bb9\u5668\u5185\u7684\u76ee\u6807\u8def\u5f84\u3002<\/li>\n\n\n\n<li>\u5bf9\u6bcf\u4e2a\u6570\u636e\u5377\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a\n<ul>\n<li>\u5982\u679c\u6570\u636e\u5377\u5b58\u5728\uff0c\u4f7f\u7528&nbsp;<code>docker run<\/code>&nbsp;\u547d\u4ee4\u542f\u52a8\u4e00\u4e2a\u65b0\u7684\u4e34\u65f6\u5bb9\u5668\uff0c\u8be5\u5bb9\u5668\u4ece\u5f53\u524d\u5bb9\u5668\u4e2d\u6302\u8f7d\u6570\u636e\u5377\uff0c\u5e76\u5c06\u5907\u4efd\u76ee\u5f55\u6302\u8f7d\u5230&nbsp;<code>\/backup<\/code>\u3002<\/li>\n\n\n\n<li>\u5728\u65b0\u7684\u4e34\u65f6\u5bb9\u5668\u4e2d\uff0c\u4f7f\u7528&nbsp;<code>tar<\/code>&nbsp;\u547d\u4ee4\u5c06\u6570\u636e\u5377\u7684\u5185\u5bb9\u6253\u5305\u4e3a tar \u6587\u4ef6\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>docker inspect<\/code>&nbsp;\u547d\u4ee4\u5c06\u5bb9\u5668\u7684\u914d\u7f6e\u4fe1\u606f\u4fdd\u5b58\u4e3a json \u6587\u4ef6\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>\u6062\u590d\u811a\u672c<\/strong>\uff1a<\/p>\n\n\n\n<ol>\n<li>\u5bf9\u5907\u4efd\u76ee\u5f55\u4e2d\u7684\u6bcf\u4e2a tar \u6587\u4ef6\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a\n<ul>\n<li>\u5982\u679c\u6587\u4ef6\u540d\u4ee5&nbsp;<code>_data.tar<\/code>&nbsp;\u7ed3\u5c3e\uff0c\u90a3\u4e48\u8fd9\u662f\u4e00\u4e2a\u6570\u636e\u5377\u7684\u5907\u4efd\u6587\u4ef6\u3002\u4f7f\u7528&nbsp;<code>docker run<\/code>&nbsp;\u547d\u4ee4\u542f\u52a8\u4e00\u4e2a\u65b0\u7684\u4e34\u65f6\u5bb9\u5668\uff0c\u8be5\u5bb9\u5668\u4ece\u5bf9\u5e94\u7684\u5bb9\u5668\u4e2d\u6302\u8f7d\u6570\u636e\u5377\uff0c\u5e76\u5c06\u5907\u4efd\u76ee\u5f55\u6302\u8f7d\u5230&nbsp;<code>\/backup<\/code>\u3002\u7136\u540e\u5728\u65b0\u7684\u4e34\u65f6\u5bb9\u5668\u4e2d\uff0c\u4f7f\u7528&nbsp;<code>tar<\/code>&nbsp;\u547d\u4ee4\u5c06 tar \u6587\u4ef6\u7684\u5185\u5bb9\u89e3\u538b\u5230\u6570\u636e\u5377\u4e2d\u3002<\/li>\n\n\n\n<li>\u5426\u5219\uff0c\u8fd9\u662f\u4e00\u4e2a\u5bb9\u5668\u7684\u5907\u4efd\u6587\u4ef6\u3002\u4f7f\u7528&nbsp;<code>docker load<\/code>&nbsp;\u547d\u4ee4\u4ece tar \u6587\u4ef6\u4e2d\u52a0\u8f7d\u955c\u50cf\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u5bf9\u5907\u4efd\u76ee\u5f55\u4e2d\u7684\u6bcf\u4e2a json \u6587\u4ef6\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a\n<ul>\n<li>\u8fd9\u662f\u4e00\u4e2a\u5bb9\u5668\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u4f7f\u7528&nbsp;<code>jq<\/code>&nbsp;\u547d\u4ee4\u4ece json \u6587\u4ef6\u4e2d\u63d0\u53d6\u5bb9\u5668\u7684\u914d\u7f6e\u4fe1\u606f\uff0c\u7136\u540e\u4f7f\u7528&nbsp;<code>docker run<\/code>&nbsp;\u547d\u4ee4\u6839\u636e\u8fd9\u4e9b\u914d\u7f6e\u4fe1\u606f\u542f\u52a8\u65b0\u7684\u5bb9\u5668\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u5bf9\u5907\u4efd\u76ee\u5f55\u4e2d\u7684\u6bcf\u4e2a\u4ee5&nbsp;<code>_data.tar<\/code>&nbsp;\u7ed3\u5c3e\u7684\u6587\u4ef6\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a\n<ul>\n<li>\u8fd9\u662f\u4e00\u4e2a\u6570\u636e\u5377\u7684\u5907\u4efd\u6587\u4ef6\u3002\u4f7f\u7528&nbsp;<code>docker run<\/code>&nbsp;\u547d\u4ee4\u542f\u52a8\u4e00\u4e2a\u65b0\u7684\u4e34\u65f6\u5bb9\u5668\uff0c\u8be5\u5bb9\u5668\u4ece\u5bf9\u5e94\u7684\u5bb9\u5668\u4e2d\u6302\u8f7d\u6570\u636e\u5377\uff0c\u5e76\u5c06\u5907\u4efd\u76ee\u5f55\u6302\u8f7d\u5230&nbsp;<code>\/backup<\/code>\u3002\u7136\u540e\u5728\u65b0\u7684\u4e34\u65f6\u5bb9\u5668\u4e2d\uff0c\u4f7f\u7528&nbsp;<code>tar<\/code>&nbsp;\u547d\u4ee4\u5c06 tar \u6587\u4ef6\u7684\u5185\u5bb9\u89e3\u538b\u5230\u6570\u636e\u5377\u4e2d\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%A4%87%E4%BB%BD%E6%96%B9%E6%B3%952\"><\/span>\u5907\u4efd\u65b9\u6cd52<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u68c0\u67e5\u76ee\u5f55\/backup\/docker_data\/\u662f\u5426\u5b58\u5728\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u5219\u521b\u5efa\u5b83\uff0c\u5e76\u521b\u5efa\u811a\u672c\u6587\u4ef6 docker_data_backup.sh\uff0c\u5e76\u8bbe\u7f6e\u6743\u9650\u4e3a755\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"mkdir -p \/backup\/docker_data\/ &amp;&amp; touch \/backup\/docker_data\/docker_data_backup.sh &amp;&amp; chmod 755 \/backup\/docker_data\/docker_data_backup.sh\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">mkdir <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">p <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">backup<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">docker_data<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">&amp;&amp;<\/span><span style=\"color: #ADBAC7\"> touch <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">backup<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">docker_data<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">docker_data_backup.sh <\/span><span style=\"color: #F47067\">&amp;&amp;<\/span><span style=\"color: #ADBAC7\"> chmod <\/span><span style=\"color: #6CB6FF\">755<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">backup<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">docker_data<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">docker_data_backup.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u6253\u5f00\u8be5\u76ee\u5f55<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"cd \/backup\/docker_data\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">cd <\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">backup<\/span><span style=\"color: #F47067\">\/<\/span><span style=\"color: #ADBAC7\">docker_data<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u6267\u884c\u811a\u672c\u547d\u4ee4\uff1adocker_data_backup.sh<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"bash docker_data_backup.sh\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">bash docker_data_backup.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>docker_data_backup.sh\u811a\u672c\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\n\n# Helper function for countdown timer\ncountdown() {\n   local seconds=$1\n   local temp\n\n   while [ $seconds -gt 0 ]; do\n      echo -ne &quot;\u5012\u8ba1\u65f6 $seconds\\033[0K\\r&quot;\n      read -t 1 -n 1 temp\n      if [ &quot;$temp&quot; = &quot;&quot; ]; then\n          echo -e &quot;\\n&quot;\n          return\n      fi\n      : $((seconds--))\n   done\n}\n\n# \u83b7\u53d6\u5f53\u524d\u7684\u65e5\u671f\u548c\u65f6\u95f4\uff0c\u683c\u5f0f\u4e3aYYYY_MM_DD_HH_MM\nNOW=$(date +&quot;%Y_%m_%d_%H_%M&quot;)\n\n# \u8bb0\u5f55\u5bb9\u5668\u540d\u79f0\uff0c\u5e76\u6309\u987a\u5e8f\u7f16\u53f7\necho &quot;\u6b63\u5728\u5217\u51fa\u6240\u6709Docker\u5bb9\u5668\uff08\u8df3\u8fc7\u542b\u6709 '1Panel' \u7684\u5bb9\u5668\uff09\uff1a&quot;\ndeclare -a CONTAINERS\ni=1\nfor name in $(docker ps -a --format &quot;{{.Names}}&quot; | grep -v &quot;1Panel&quot;)\ndo\n    echo &quot;[$i] $name&quot;\n    CONTAINERS[$i]=$name\n    i=$((i+1))\ndone\n\necho &quot;\u8bf7\u8f93\u5165\u5bb9\u5668\u7f16\u53f7\u8fdb\u884c\u9009\u62e9\u5907\u4efd\uff0c\u7528\u7a7a\u683c\u6216\u8005\u9017\u53f7\u9694\u5f00\uff0c\u6216\u76f4\u63a5\u56de\u8f66\u5907\u4efd\u6240\u6709\u5bb9\u5668\u3002\u8f93\u5165 'exit' \u9000\u51fa\u3002\u60a8\u670910\u79d2\u65f6\u95f4\u8f93\u5165\uff1a&quot;\ncountdown 10\n\nread -r -t 10 index\nif [ -z &quot;$index&quot; ]\nthen\n    array=($(seq 1 ${#CONTAINERS[@]}))\n    echo &quot;\u6ca1\u6709\u8f93\u5165\u6216\u8f93\u5165\u8d85\u65f6\uff0c\u5907\u4efd\u6240\u6709\u5bb9\u5668...&quot;\nelif [ &quot;$index&quot; == &quot;exit&quot; ]\nthen\n    echo &quot;\u6b63\u5728\u9000\u51fa\u811a\u672c...&quot;\n    exit 0\nelse\n    IFS=', ' read -r -a array &lt;&lt;&lt; &quot;$index&quot;\n    if [ ${#array[@]} -eq 0 ]\n    then\n        echo &quot;\u672a\u63d0\u4f9b\u4efb\u4f55\u7f16\u53f7\uff0c\u6b63\u5728\u9000\u51fa\u811a\u672c...&quot;\n        exit 1\n    fi\nfi\n\necho &quot;\u5f85\u5907\u4efd\u7684\u5bb9\u5668\u76ee\u5f55\u5982\u4e0b\uff1a&quot;\nfor element in &quot;${array[@]}&quot;\ndo\n    CONTAINER_NAME=&quot;${CONTAINERS[$element]}&quot;\n    echo &quot;===== \u5bb9\u5668\uff1a$CONTAINER_NAME =====&quot;\n    docker inspect --format '{{ range .Mounts }}{{ println .Source }}{{ end }}' &quot;${CONTAINERS[$element]}&quot;\ndone\n\necho -e &quot;\\n\u6309\u56de\u8f66\u952e\u7ee7\u7eed\u6267\u884c\u5907\u4efd\uff0c\u5176\u4ed6\u4efb\u610f\u952e\u9000\u51fa\u811a\u672c\u3002\u5012\u8ba1\u65f610\u79d2\u540e\u5c06\u81ea\u52a8\u7ee7\u7eed\u3002&quot;\ncountdown 10\n\nread -r -n1 -t 10 pre_input\nif [ &quot;$pre_input&quot; != &quot;&quot; ]; then\n    echo -e &quot;\\n\u7528\u6237\u5df2\u9009\u62e9\u9000\u51fa\u811a\u672c...&quot;\n    exit 0\nfi\necho -e &quot;\\n\u5f00\u59cb\u5907\u4efd...\\n&quot;\n\nBACKUP_ROOT_DIR=&quot;\/backup\/docker_data&quot;\nBACKUP_DIR=&quot;$BACKUP_ROOT_DIR\/docker_data_backup_$NOW&quot;\nmkdir -p &quot;$BACKUP_DIR&quot;\n\nLOG_FILE=&quot;$BACKUP_DIR\/docker_data_backup_$NOW.log&quot;\ntouch &quot;$LOG_FILE&quot;\n\nlog_backup() {\n  local message=&quot;$1&quot;\n  echo &quot;${message}&quot; | tee -a &quot;$LOG_FILE&quot;\n}\n\n# \u5907\u4efd\u8fc7\u7a0b\nfor element in &quot;${array[@]}&quot;\ndo\n    CONTAINER_NAME=&quot;${CONTAINERS[$element]}&quot;\n    log_backup &quot;\u6b63\u5728\u5907\u4efd ${CONTAINER_NAME}\uff1a&quot;\n    \n    MOUNT_INDEX=1\n    VOLUMES=$(docker inspect --format '{{ range .Mounts }}{{ println .Source }}{{ end }}' &quot;${CONTAINERS[$element]}&quot;)\n    \n    for volume in $VOLUMES; do\n        if [[ &quot;$volume&quot; == &quot;\/var\/run\/docker.sock&quot; ]]; then\n            continue\n        fi\n        \n        CONTAINER_BACKUP_SUBDIR=&quot;${CONTAINER_NAME}_${MOUNT_INDEX}&quot;\n        CONTAINER_BACKUP_DIR=&quot;${BACKUP_DIR}\/${CONTAINER_BACKUP_SUBDIR}&quot;\n        mkdir -p &quot;$CONTAINER_BACKUP_DIR&quot;\n\n        if [ -d &quot;$volume&quot; ] || [ -f &quot;$volume&quot; ]; then\n            echo &quot;\u6b63\u5728\u5907\u4efd\uff1a$volume&quot;\n            cp -a &quot;$volume\/&quot; &quot;$CONTAINER_BACKUP_DIR\/&quot; &amp;&amp; \\\n            log_backup &quot;${volume} \u5df2\u5907\u4efd\u5230 ${CONTAINER_BACKUP_SUBDIR}&quot;\n        else\n            log_backup &quot;WARNING: $volume \u4e0d\u5b58\u5728\uff0c\u5c06\u88ab\u8df3\u8fc7\u3002&quot;\n        fi\n\n        ((MOUNT_INDEX++))\n    done\n    log_backup &quot;\u5bb9\u5668 ${CONTAINER_NAME} \u5907\u4efd\u5b8c\u6210\u3002&quot;\n    echo -e &quot;\\n&quot; | tee -a &quot;$LOG_FILE&quot;\ndone\n\necho &quot;\u65e5\u5fd7\u8bb0\u5f55\u5b8c\u6210\uff0c\u6b63\u5728\u521b\u5efa\u5907\u4efd\u7684tar\u6587\u4ef6...&quot;\nFINAL_BACKUP_FILE=&quot;$BACKUP_ROOT_DIR\/docker_data_backup_$NOW.tar&quot;\ntar -czf &quot;$FINAL_BACKUP_FILE&quot; -C &quot;$BACKUP_ROOT_DIR&quot; &quot;docker_data_backup_$NOW&quot; &amp;&amp; \\\necho &quot;\u5907\u4efd\u6587\u4ef6\u5df2\u6253\u5305\u4e3a\uff1a$FINAL_BACKUP_FILE&quot;\n\n# \u5220\u9664\u539f\u59cb\u5907\u4efd\u76ee\u5f55\nif [ -f &quot;$FINAL_BACKUP_FILE&quot; ]; then\n    echo &quot;\u6b63\u5728\u5220\u9664\u539f\u59cb\u5907\u4efd\u6587\u4ef6\u5939...&quot;\n    rm -rf &quot;$BACKUP_DIR&quot;\n    log_backup &quot;\u539f\u59cb\u5907\u4efd\u76ee\u5f55 ${BACKUP_DIR} \u5df2\u5220\u9664\u3002&quot;\n    echo &quot;\u539f\u59cb\u5907\u4efd\u6587\u4ef6\u5939\u5df2\u5220\u9664\u3002&quot;\nelse\n    log_backup &quot;\u5907\u4efdtar\u6587\u4ef6\u521b\u5efa\u5931\u8d25\uff0c\u672a\u5220\u9664\u539f\u59cb\u5907\u4efd\u76ee\u5f55\u3002&quot;\n    echo &quot;\u5907\u4efdtar\u6587\u4ef6\u521b\u5efa\u5931\u8d25\uff0c\u672a\u5220\u9664\u539f\u59cb\u5907\u4efd\u76ee\u5f55\u3002&quot;\nfi\n\n# \u4fdd\u7559\u6700\u65b0\u4e24\u4e2a\u5907\u4efd\u6587\u4ef6\u5e76\u5220\u9664\u5176\u4ed6\u65e7\u6587\u4ef6\necho &quot;\u68c0\u67e5\u5907\u4efd\u6587\u4ef6\u5939\u5185\u7684\u5907\u4efd\u6587\u4ef6\u6570\u91cf...&quot;\ncd &quot;$BACKUP_ROOT_DIR&quot;\nBACKUP_FILES=$(ls docker_data_backup_*.tar)\nTOTAL_BACKUPS=$(echo &quot;$BACKUP_FILES&quot; | wc -l)\n\nif [ $TOTAL_BACKUPS -gt 2 ]; then\n    echo &quot;\u5df2\u8d85\u8fc7\u8bbe\u5b9a\u7684\u5907\u4efd\u6587\u4ef6\u6570\u91cf\uff0c\u6b63\u5728\u5220\u9664\u65e7\u6587\u4ef6...&quot;\n    # \u5220\u9664\u6700\u8001\u7684\u5907\u4efd\u6587\u4ef6\uff0c\u53ea\u4fdd\u7559\u6700\u65b0\u7684\u4e24\u4e2a\n    ls -1tr docker_data_backup_*.tar | head -n -2 | xargs rm -f\n    echo &quot;\u65e7\u5907\u4efd\u6587\u4ef6\u5df2\u5220\u9664\u3002&quot;\nfi\n\necho -e &quot;\u6240\u6709\u9009\u5b9a\u5bb9\u5668\u7684\u5907\u4efd\u6d41\u7a0b\u73b0\u5df2\u5b8c\u6210\uff01&quot;\" style=\"color:#22272e;display:none;background-color:#adbac7\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"none\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #768390\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"># Helper <\/span><span style=\"color: #F47067\">function<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">for<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">countdown<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">timer<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCBDFB\">countdown<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">   local seconds<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">$1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">   local temp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #F47067\">while<\/span><span style=\"color: #ADBAC7\"> [ $seconds <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">gt <\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\"> ]; <\/span><span style=\"color: #F47067\">do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">      echo <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">ne <\/span><span style=\"color: #96D0FF\">&quot;\u5012\u8ba1\u65f6 $seconds<\/span><span style=\"color: #F47067\">\\033<\/span><span style=\"color: #96D0FF\">[0K<\/span><span style=\"color: #F47067\">\\r<\/span><span style=\"color: #96D0FF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">      read <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">t <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">n <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> temp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">      <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> [ <\/span><span style=\"color: #96D0FF\">&quot;$temp&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;&quot;<\/span><span style=\"color: #ADBAC7\"> ]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">          echo <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">e <\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #F47067\">\\n<\/span><span style=\"color: #96D0FF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">          <\/span><span style=\"color: #F47067\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">      fi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">      : <\/span><span style=\"color: #DCBDFB\">$<\/span><span style=\"color: #ADBAC7\">((seconds<\/span><span style=\"color: #F47067\">--<\/span><span style=\"color: #ADBAC7\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">   done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"># \u83b7\u53d6\u5f53\u524d\u7684\u65e5\u671f\u548c\u65f6\u95f4\uff0c\u683c\u5f0f\u4e3aYYYY_MM_DD_HH_MM<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6CB6FF\">NOW<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #DCBDFB\">$<\/span><span style=\"color: #ADBAC7\">(date <\/span><span style=\"color: #F47067\">+<\/span><span style=\"color: #96D0FF\">&quot;%Y_%m_%d_%H_%M&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"># \u8bb0\u5f55\u5bb9\u5668\u540d\u79f0\uff0c\u5e76\u6309\u987a\u5e8f\u7f16\u53f7<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #96D0FF\">&quot;\u6b63\u5728\u5217\u51fa\u6240\u6709Docker\u5bb9\u5668\uff08\u8df3\u8fc7\u542b\u6709 &#39;1Panel&#39; \u7684\u5bb9\u5668\uff09\uff1a&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">declare<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">a <\/span><span style=\"color: #6CB6FF\">CONTAINERS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">i<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">for name <\/span><span style=\"color: #F47067\">in<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">$<\/span><span style=\"color: #ADBAC7\">(docker ps <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">a <\/span><span style=\"color: #F47067\">--<\/span><span style=\"color: #ADBAC7\">format <\/span><span style=\"color: #96D0FF\">&quot;{{.Names}}&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">|<\/span><span style=\"color: #ADBAC7\"> grep <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">v <\/span><span style=\"color: #96D0FF\">&quot;1Panel&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;[$i] $name&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">CONTAINERS<\/span><span style=\"color: #ADBAC7\">[$i]<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">$name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    i<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #DCBDFB\">$<\/span><span style=\"color: #ADBAC7\">((i<\/span><span style=\"color: #F47067\">+<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">done<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #96D0FF\">&quot;\u8bf7\u8f93\u5165\u5bb9\u5668\u7f16\u53f7\u8fdb\u884c\u9009\u62e9\u5907\u4efd\uff0c\u7528\u7a7a\u683c\u6216\u8005\u9017\u53f7\u9694\u5f00\uff0c\u6216\u76f4\u63a5\u56de\u8f66\u5907\u4efd\u6240\u6709\u5bb9\u5668\u3002\u8f93\u5165 &#39;exit&#39; \u9000\u51fa\u3002\u60a8\u670910\u79d2\u65f6\u95f4\u8f93\u5165\uff1a&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">countdown <\/span><span style=\"color: #6CB6FF\">10<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">read <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">r <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">t <\/span><span style=\"color: #6CB6FF\">10<\/span><span style=\"color: #ADBAC7\"> index<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> [ <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">z <\/span><span style=\"color: #96D0FF\">&quot;$index&quot;<\/span><span style=\"color: #ADBAC7\"> ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    array<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #DCBDFB\">$<\/span><span style=\"color: #ADBAC7\">(seq <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> ${#CONTAINERS[@]}))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo &quot;\u6ca1\u6709\u8f93\u5165\u6216\u8f93\u5165\u8d85\u65f6\uff0c\u5907\u4efd\u6240\u6709\u5bb9\u5668...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">elif [ <\/span><span style=\"color: #96D0FF\">&quot;$index&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">==<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;exit&quot;<\/span><span style=\"color: #ADBAC7\"> ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo &quot;\u6b63\u5728\u9000\u51fa\u811a\u672c...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    exit 0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    IFS=&#39;, &#39; read -r -a array &lt;&lt;&lt; &quot;$index&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    if [ ${#array[@]} -eq 0 ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        echo &quot;\u672a\u63d0\u4f9b\u4efb\u4f55\u7f16\u53f7\uff0c\u6b63\u5728\u9000\u51fa\u811a\u672c...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        exit 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    fi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">fi<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo &quot;\u5f85\u5907\u4efd\u7684\u5bb9\u5668\u76ee\u5f55\u5982\u4e0b\uff1a&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">for element in &quot;${array[@]}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    CONTAINER_NAME=&quot;${CONTAINERS[$element]}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo &quot;===== \u5bb9\u5668\uff1a$CONTAINER_NAME =====&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    docker inspect --format &#39;{{ range .Mounts }}{{ println .Source }}{{ end }}&#39; &quot;${CONTAINERS[$element]}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">done<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo -e &quot;\\n\u6309\u56de\u8f66\u952e\u7ee7\u7eed\u6267\u884c\u5907\u4efd\uff0c\u5176\u4ed6\u4efb\u610f\u952e\u9000\u51fa\u811a\u672c\u3002\u5012\u8ba1\u65f610\u79d2\u540e\u5c06\u81ea\u52a8\u7ee7\u7eed\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">countdown 10<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">read -r -n1 -t 10 pre_input<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">if [ <\/span><span style=\"color: #96D0FF\">&quot;$pre_input&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">!=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;&quot;<\/span><span style=\"color: #ADBAC7\"> ]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo -e &quot;\\n\u7528\u6237\u5df2\u9009\u62e9\u9000\u51fa\u811a\u672c...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    exit 0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">fi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo -e &quot;\\n\u5f00\u59cb\u5907\u4efd...\\n&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">BACKUP_ROOT_DIR=&quot;\/backup\/docker_data&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">BACKUP_DIR=&quot;$BACKUP_ROOT_DIR\/docker_data_backup_$NOW&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">mkdir -p &quot;$BACKUP_DIR&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">LOG_FILE=&quot;$BACKUP_DIR\/docker_data_backup_$NOW.log&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">touch &quot;$LOG_FILE&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">log_backup() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  local message=&quot;$1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  echo &quot;${message}&quot; | tee -a &quot;$LOG_FILE&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"># \u5907\u4efd\u8fc7\u7a0b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">for element in &quot;${array[@]}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    CONTAINER_NAME=&quot;${CONTAINERS[$element]}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    log_backup &quot;\u6b63\u5728\u5907\u4efd ${CONTAINER_NAME}\uff1a&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    MOUNT_INDEX=1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    VOLUMES=$(docker inspect --format &#39;{{ range .Mounts }}{{ println .Source }}{{ end }}&#39; &quot;${CONTAINERS[$element]}&quot;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    for volume in $VOLUMES; do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        if [[ <\/span><span style=\"color: #96D0FF\">&quot;$volume&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">==<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;\/var\/run\/docker.sock&quot;<\/span><span style=\"color: #ADBAC7\"> ]]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            continue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        fi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        CONTAINER_BACKUP_SUBDIR=&quot;${CONTAINER_NAME}_${MOUNT_INDEX}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        CONTAINER_BACKUP_DIR=&quot;${BACKUP_DIR}\/${CONTAINER_BACKUP_SUBDIR}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        mkdir -p &quot;$CONTAINER_BACKUP_DIR&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        if [ <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">d <\/span><span style=\"color: #96D0FF\">&quot;$volume&quot;<\/span><span style=\"color: #ADBAC7\"> ] || [ <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">f <\/span><span style=\"color: #96D0FF\">&quot;$volume&quot;<\/span><span style=\"color: #ADBAC7\"> ]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            echo &quot;\u6b63\u5728\u5907\u4efd\uff1a$volume&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            cp -a &quot;$volume\/&quot; &quot;$CONTAINER_BACKUP_DIR\/&quot; &amp;&amp; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            log_backup &quot;${volume} \u5df2\u5907\u4efd\u5230 ${CONTAINER_BACKUP_SUBDIR}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            log_backup &quot;WARNING: $volume \u4e0d\u5b58\u5728\uff0c\u5c06\u88ab\u8df3\u8fc7\u3002<\/span><span style=\"color: #96D0FF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #96D0FF\">        f<\/span><span style=\"color: #FF938A; font-style: italic\">i<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        ((<\/span><span style=\"color: #6CB6FF\">MOUNT_INDEX<\/span><span style=\"color: #F47067\">++<\/span><span style=\"color: #ADBAC7\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    log_backup <\/span><span style=\"color: #96D0FF\">&quot;\u5bb9\u5668 ${CONTAINER_NAME} \u5907\u4efd\u5b8c\u6210\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">e <\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #F47067\">\\n<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">|<\/span><span style=\"color: #ADBAC7\"> tee <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">a <\/span><span style=\"color: #96D0FF\">&quot;$LOG_FILE&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">done<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #96D0FF\">&quot;\u65e5\u5fd7\u8bb0\u5f55\u5b8c\u6210\uff0c\u6b63\u5728\u521b\u5efa\u5907\u4efd\u7684tar\u6587\u4ef6...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6CB6FF\">FINAL_BACKUP_FILE<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #96D0FF\">&quot;$BACKUP_ROOT_DIR\/docker_data_backup_$NOW.tar&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">tar <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">czf <\/span><span style=\"color: #96D0FF\">&quot;$FINAL_BACKUP_FILE&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #6CB6FF\">C<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;$BACKUP_ROOT_DIR&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;docker_data_backup_$NOW&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">&amp;&amp;<\/span><span style=\"color: #ADBAC7\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #96D0FF\">&quot;\u5907\u4efd\u6587\u4ef6\u5df2\u6253\u5305\u4e3a\uff1a$FINAL_BACKUP_FILE&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"># \u5220\u9664\u539f\u59cb\u5907\u4efd\u76ee\u5f55<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">if [ <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">f <\/span><span style=\"color: #96D0FF\">&quot;$FINAL_BACKUP_FILE&quot;<\/span><span style=\"color: #ADBAC7\"> ]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;\u6b63\u5728\u5220\u9664\u539f\u59cb\u5907\u4efd\u6587\u4ef6\u5939...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    rm <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">rf <\/span><span style=\"color: #96D0FF\">&quot;$BACKUP_DIR&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    log_backup <\/span><span style=\"color: #96D0FF\">&quot;\u539f\u59cb\u5907\u4efd\u76ee\u5f55 ${BACKUP_DIR} \u5df2\u5220\u9664\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;\u539f\u59cb\u5907\u4efd\u6587\u4ef6\u5939\u5df2\u5220\u9664\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    log_backup <\/span><span style=\"color: #96D0FF\">&quot;\u5907\u4efdtar\u6587\u4ef6\u521b\u5efa\u5931\u8d25\uff0c\u672a\u5220\u9664\u539f\u59cb\u5907\u4efd\u76ee\u5f55\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;\u5907\u4efdtar\u6587\u4ef6\u521b\u5efa\u5931\u8d25\uff0c\u672a\u5220\u9664\u539f\u59cb\u5907\u4efd\u76ee\u5f55\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">fi<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"># \u4fdd\u7559\u6700\u65b0\u4e24\u4e2a\u5907\u4efd\u6587\u4ef6\u5e76\u5220\u9664\u5176\u4ed6\u65e7\u6587\u4ef6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #96D0FF\">&quot;\u68c0\u67e5\u5907\u4efd\u6587\u4ef6\u5939\u5185\u7684\u5907\u4efd\u6587\u4ef6\u6570\u91cf...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">cd <\/span><span style=\"color: #96D0FF\">&quot;$BACKUP_ROOT_DIR&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6CB6FF\">BACKUP_FILES<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #DCBDFB\">$<\/span><span style=\"color: #ADBAC7\">(ls docker_data_backup_<\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">.tar)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6CB6FF\">TOTAL_BACKUPS<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #DCBDFB\">$<\/span><span style=\"color: #ADBAC7\">(echo <\/span><span style=\"color: #96D0FF\">&quot;$BACKUP_FILES&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">|<\/span><span style=\"color: #ADBAC7\"> wc <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">l)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">if [ $TOTAL_BACKUPS <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">gt <\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\"> ]; then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;\u5df2\u8d85\u8fc7\u8bbe\u5b9a\u7684\u5907\u4efd\u6587\u4ef6\u6570\u91cf\uff0c\u6b63\u5728\u5220\u9664\u65e7\u6587\u4ef6...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    # \u5220\u9664\u6700\u8001\u7684\u5907\u4efd\u6587\u4ef6\uff0c\u53ea\u4fdd\u7559\u6700\u65b0\u7684\u4e24\u4e2a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    ls <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">1tr docker_data_backup_<\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">.tar <\/span><span style=\"color: #F47067\">|<\/span><span style=\"color: #ADBAC7\"> head <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">n <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">|<\/span><span style=\"color: #ADBAC7\"> xargs rm <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    echo <\/span><span style=\"color: #96D0FF\">&quot;\u65e7\u5907\u4efd\u6587\u4ef6\u5df2\u5220\u9664\u3002&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">fi<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">echo <\/span><span style=\"color: #F47067\">-<\/span><span style=\"color: #ADBAC7\">e <\/span><span style=\"color: #96D0FF\">&quot;\u6240\u6709\u9009\u5b9a\u5bb9\u5668\u7684\u5907\u4efd\u6d41\u7a0b\u73b0\u5df2\u5b8c\u6210\uff01&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u8fd9\u4e2a\u811a\u672c\u7684\u4e3b\u8981\u7528\u9014\u662f\u5907\u4efdDocker\u5bb9\u5668\u76f8\u5173\u7684\u6570\u636e\u3002\u4ee5\u4e0b\u662f\u811a\u672c\u6267\u884c\u7684\u6bcf\u4e00\u6b65\u8be6\u7ec6\u89e3\u91ca\uff1a<\/p>\n\n\n\n<ol>\n<li><strong>\u8bbe\u7f6e\u5012\u8ba1\u65f6\u51fd\u6570\uff08countdown\uff09<\/strong>\uff1a\u811a\u672c\u5b9a\u4e49\u4e86\u4e00\u4e2a<code>countdown<\/code>\u51fd\u6570\uff0c\u7528\u4e8e\u4e3a\u7528\u6237\u63d0\u4f9b\u4e00\u4e2a\u7b80\u5355\u7684\u5012\u8ba1\u65f6\u529f\u80fd\uff0c\u5728\u67d0\u4e9b\u64cd\u4f5c\u524d\u7ed9\u4e88\u7528\u6237\u65f6\u95f4\u4f5c\u51fa\u53cd\u5e94\u3002<\/li>\n\n\n\n<li><strong>\u83b7\u53d6\u5f53\u524d\u65f6\u95f4\u548c\u65e5\u671f<\/strong>\uff1a\u811a\u672c\u4f7f\u7528<code>date<\/code>\u547d\u4ee4\u83b7\u53d6\u5f53\u524d\u7684\u65f6\u95f4\uff0c\u683c\u5f0f\u4e3a\u5e74_\u6708_\u65e5_\u65f6_\u5206(YYYY_MM_DD_HH_MM)\uff0c\u8fd9\u5c06\u7528\u4e8e\u521b\u5efa\u5177\u6709\u65f6\u95f4\u6233\u7684\u5907\u4efd\u76ee\u5f55\u548c\u5907\u4efd\u6587\u4ef6\u3002<\/li>\n\n\n\n<li><strong>\u5217\u51fa\u6240\u6709Docker\u5bb9\u5668<\/strong>\uff1a\u811a\u672c\u5217\u51fa\u5f53\u524d\u6240\u6709\u8fd0\u884c\u7684Docker\u5bb9\u5668\u540d\u79f0\uff0c\u4f46\u8df3\u8fc7\u6240\u6709\u540d\u79f0\u4e2d\u5305\u542b&#8221;1Panel&#8221;\u5b57\u7b26\u4e32\u7684\u5bb9\u5668\u3002\u4e4b\u540e\uff0c\u5b83\u63d0\u4f9b\u4e00\u4e2a\u63a5\u53e3\u8ba9\u7528\u6237\u8f93\u5165\u4ed6\u4eec\u60f3\u8981\u5907\u4efd\u7684\u7279\u5b9a\u5bb9\u5668\u7f16\u53f7\u3002\u5982\u679c\u572810\u79d2\u5185\u6ca1\u6709\u54cd\u5e94\u6216\u7528\u6237\u56de\u8f66\uff0c\u811a\u672c\u5c06\u5907\u4efd\u6240\u6709\u5bb9\u5668\u3002<\/li>\n\n\n\n<li><strong>\u63a5\u6536\u7528\u6237\u8f93\u5165<\/strong>\uff1a\u6b64\u6b65\u9aa4\u4e2d\uff0c\u811a\u672c\u7b49\u5f85\u7528\u6237\u6307\u5b9a\u8981\u5907\u4efd\u7684Docker\u5bb9\u5668\u7f16\u53f7\u3002\u7528\u6237\u8f93\u5165\u7684\u7f16\u53f7\u7528\u4e8e\u9009\u5b9a\u5177\u4f53\u5907\u4efd\u54ea\u4e9b\u5bb9\u5668\u3002<\/li>\n\n\n\n<li><strong>\u51b3\u5b9a\u5907\u4efd\u54ea\u4e9b\u5bb9\u5668<\/strong>\uff1a\u6839\u636e\u7528\u6237\u7684\u9009\u62e9\uff0c\u811a\u672c\u51b3\u5b9a\u5907\u4efd\u6240\u6709\u7684\u5bb9\u5668\u6216\u662f\u53ea\u5907\u4efd\u6307\u5b9a\u7f16\u53f7\u7684\u5bb9\u5668\u3002<\/li>\n\n\n\n<li><strong>\u521b\u5efa\u5907\u4efd\u76ee\u5f55\u548c\u65e5\u5fd7\u6587\u4ef6<\/strong>\uff1a\u811a\u672c\u521b\u5efa\u4e00\u4e2a\u6839\u5907\u4efd\u76ee\u5f55\u4ee5\u53ca\u4e00\u4e2a\u7279\u5b9a\u7684\u5907\u4efd\u76ee\u5f55\uff0c\u8def\u5f84\u5305\u542b\u4e86\u4e4b\u524d\u83b7\u53d6\u7684\u65f6\u95f4\u6233\u3002\u6b64\u5916\u8fd8\u521b\u5efa\u4e86\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\u7528\u4e8e\u8bb0\u5f55\u5907\u4efd\u8fc7\u7a0b\u4e2d\u7684\u4e8b\u4ef6\u3002<\/li>\n\n\n\n<li><strong>\u6267\u884c\u5907\u4efd\u64cd\u4f5c<\/strong>\uff1a\u9488\u5bf9\u6bcf\u4e2a\u9009\u4e2d\u5907\u4efd\u7684\u5bb9\u5668\uff0c\u811a\u672c\u4f1a\u83b7\u53d6\u5176\u6302\u8f7d\u70b9\u7684\u6570\u636e\uff0c\u5e76\u5c06\u6240\u6709\u6570\u636e\u590d\u5236\u5230\u4e4b\u524d\u521b\u5efa\u7684\u5907\u4efd\u76ee\u5f55\u4e0b\u3002\u5907\u4efd\u8fc7\u7a0b\u4e2d\u7684\u8be6\u7ec6\u4fe1\u606f\u88ab\u5199\u5165\u65e5\u5fd7\u6587\u4ef6\u3002<\/li>\n\n\n\n<li><strong>\u521b\u5efa\u5907\u4efdtar\u5305<\/strong>\uff1a\u811a\u672c\u6253\u5305\u521a\u624d\u521b\u5efa\u7684\u5907\u4efd\u76ee\u5f55\u4e3a\u4e00\u4e2a<code>.tar<\/code>\u6587\u4ef6\uff0c\u8fd9\u6837\u5907\u4efd\u6587\u4ef6\u4f1a\u66f4\u65b9\u4fbf\u5730\u88ab\u5b58\u50a8\u548c\u4f20\u8f93\u3002<\/li>\n\n\n\n<li><strong>\u5220\u9664\u539f\u59cb\u5907\u4efd\u76ee\u5f55<\/strong>\uff1a\u4e00\u65e6<code>.tar<\/code>\u5907\u4efd\u6587\u4ef6\u521b\u5efa\u5b8c\u6210\uff0c\u811a\u672c\u4f1a\u5220\u9664\u539f\u6765\u7684\u5907\u4efd\u76ee\u5f55\u6765\u91ca\u653e\u7a7a\u95f4\uff0c\u53ea\u7559\u4e0b\u6253\u5305\u540e\u7684tar\u6587\u4ef6\u3002<\/li>\n\n\n\n<li><strong>\u6e05\u7406\u65e7\u7684\u5907\u4efd\u6587\u4ef6<\/strong>\uff1a\u811a\u672c\u68c0\u67e5\u5907\u4efd\u6839\u76ee\u5f55\u4e0b\u6240\u6709\u73b0\u6709\u7684tar\u5907\u4efd\u6587\u4ef6\u7684\u6570\u91cf\u3002\u5982\u679c\u5907\u4efd\u6587\u4ef6\u8d85\u8fc7\u4e86\u8bbe\u5b9a\u7684\u6570\u91cf\uff08\u5728\u672c\u4f8b\u4e2d\u4e3a2\u4e2a\uff09\uff0c\u811a\u672c\u4f1a\u5220\u9664\u6700\u65e7\u7684\u5907\u4efd\u6587\u4ef6\uff0c\u53ea\u4fdd\u7559\u4e24\u4e2a\u6700\u65b0\u7684\u5907\u4efd\u6587\u4ef6\u3002<\/li>\n\n\n\n<li><strong>\u5b8c\u6210\u5907\u4efd<\/strong>\uff1a\u811a\u672c\u5728\u5907\u4efd\u5b8c\u6210\u540e\u7ed9\u51fa\u63d0\u793a\uff0c\u663e\u793a\u6240\u6709\u9009\u5b9a\u7684\u5bb9\u5668\u5df2\u7ecf\u5907\u4efd\u5b8c\u6210\u3002\u6b64\u65f6\uff0c\u6839\u636e\u7528\u6237\u7684\u5907\u4efd\u610f\u56fe\uff0c\u91cd\u8981\u6570\u636e\u5df2\u88ab\u5b89\u5168\u5b58\u50a8\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u5728\u4f7f\u7528\u8fd9\u4e2a\u811a\u672c\u4e4b\u524d\uff0c\u8bf7\u786e\u4fdd\u60a8\u5bf9\u811a\u672c\u6709\u6b63\u786e\u7684\u7406\u89e3\uff0c\u5e76\u5df2\u5728\u5b89\u5168\u7684\u73af\u5883\u4e2d\u8fdb\u884c\u4e86\u6d4b\u8bd5\uff0c\u7279\u522b\u662f\u5bf9\u4e8e\u5220\u9664\u6587\u4ef6\u548c\u76ee\u5f55\u7684\u64cd\u4f5c\u3002\u9519\u8bef\u7684\u547d\u4ee4\u6216\u8005\u65e0\u610f\u7684\u4f7f\u7528\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6570\u636e\u4e22\u5931\u3002<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-8f6937f6-410a-4ebe-a5e9-441891ebfb60\" href=\"https:\/\/blog.kimi.ee\/wp-content\/uploads\/docker_data_backup\u7684ai\u63d0\u95ee\u8fc7\u7a0b.txt\">docker_data_backup\u7684ai\u63d0\u95ee\u8fc7\u7a0b\u5907\u4efd<\/a><a href=\"https:\/\/blog.kimi.ee\/wp-content\/uploads\/docker_data_backup\u7684ai\u63d0\u95ee\u8fc7\u7a0b.txt\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-8f6937f6-410a-4ebe-a5e9-441891ebfb60\">\u4e0b\u8f7d<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u811a\u672c\u5206\u4e3a\u4e24\u6b65\u9aa4\uff0c\u4e00\u4e2a\u662f\u5907\u4efd\uff0c\u4e00\u4e2a\u662f\u6062\u590d  &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"\u3010\u5907\u4efd\u3011Docker\u4e00\u952e\u6279\u91cf\u5907\u4efd\u6062\u590d\u811a\u672c\" class=\"read-more button\" href=\"https:\/\/blog.kimi.ee\/?p=1798#more-1798\">Read more<span class=\"screen-reader-text\">\u3010\u5907\u4efd\u3011Docker\u4e00\u952e\u6279\u91cf\u5907\u4efd\u6062\u590d\u811a\u672c<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[105,107,104,106,108,49],"_links":{"self":[{"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=\/wp\/v2\/posts\/1798"}],"collection":[{"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1798"}],"version-history":[{"count":12,"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=\/wp\/v2\/posts\/1798\/revisions"}],"predecessor-version":[{"id":1951,"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=\/wp\/v2\/posts\/1798\/revisions\/1951"}],"wp:attachment":[{"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kimi.ee\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}