{"id":35748,"date":"2026-01-11T17:30:43","date_gmt":"2026-01-11T10:30:43","guid":{"rendered":"https:\/\/dps.media\/giai-phong-du-lieu-huong-dan-di-doi-metabase-docker-volume-sang-vps-moi-2026\/"},"modified":"2026-01-11T17:33:43","modified_gmt":"2026-01-11T10:33:43","slug":"%e8%a7%a3%e6%94%be%e6%95%b0%e6%8d%ae-%e8%bf%81%e7%a7%bb-metabase-docker-volume-%e5%88%b0-%e6%96%b0-vps-2026","status":"publish","type":"post","link":"https:\/\/dps.media\/zh\/%e8%a7%a3%e6%94%be%e6%95%b0%e6%8d%ae-%e8%bf%81%e7%a7%bb-metabase-docker-volume-%e5%88%b0-%e6%96%b0-vps-2026\/","title":{"rendered":"\u6570\u636e\u89e3\u653e\uff1a\u8fc1\u79fb Metabase (Docker Volume) \u5230\u65b0 VPS 2026 \u6307\u5357"},"content":{"rendered":"<p class=\"wp-block-paragraph\">\u4f60\u662f\u5426\u66fe\u7ecf\u8fc1\u79fb\u8fc7\u4e00\u4e2a\u590d\u6742\u7684 Supabase \u7cfb\u7edf\uff0c\u73b0\u5728\u662f\u65f6\u5019\u9762\u5bf9\u4e0b\u4e00\u4e2a\u6311\u6218\uff1a <strong>Metabase<\/strong>. \u3002\u5982\u679c Supabase \u5c06\u6570\u636e\u660e\u786e\u5b58\u50a8\u5728 bind-mount \u6587\u4ef6\u5939\u4e2d\uff0c\u90a3\u4e48 Metabase \u9ed8\u8ba4\u60c5\u51b5\u4e0b\u901a\u5e38\u5c06\u6570\u636e\u5c0f\u5fc3\u9690\u85cf\u5728 <strong>Docker Volumes<\/strong> \u9690\u5f62\u4e4b\u4e2d\u3002\u8fd9\u4f7f\u5f97\u5907\u4efd\u6216\u8fc1\u79fb\u5230\u65b0 VPS \u5bf9\u4e8e\u975e\u4e13\u4e1a\u4eba\u58eb\u6765\u8bf4\u53d8\u5f97\u66f4\u52a0\u201c\u68d8\u624b\u201d\u3002.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u5c06\u4e00\u8d77\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff1a\u5982\u4f55\u4ece\u65e7 VPS \u6df1\u5904\u9690\u85cf\u7684 Docker Volume \u4e2d\u201c\u62d4\u51fa\u201d\u6574\u4e2a Metabase \u6570\u636e\uff08\u56fe\u8868\u3001\u4eea\u8868\u677f\u3001\u7528\u6237\uff09\uff0c\u8fc1\u79fb\u5230\u4e00\u4e2a\u5168\u65b0\u7684 VPS\uff0c\u7279\u522b\u662f\u5c06\u5176\u8f6c\u6362\u4e3a\u6587\u4ef6\u5939 (Bind Mount) \u5f62\u5f0f\uff0c\u4ee5\u4fbf\u4ee5\u540e\u66f4\u5bb9\u6613\u6c38\u4e45\u7ba1\u7406\u3002.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u95ee\u9898\uff1a \u201c\u9690\u5f62\u201d\u6570\u636e (Docker Volumes)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u4f60\u4f7f\u7528\u547d\u4ee4\u5b89\u88c5 Metabase \u65f6 <code data-no-translation=\"\">docker run<\/code> \u6216\u8005\u7f51\u7edc\u4e0a\u7684 compose \u793a\u4f8b\u6587\u4ef6\uff0c\u6570\u636e\u901a\u5e38\u5b58\u50a8\u5728 Docker Volume (Managed Volume) \u4e2d\u3002\u4f60\u4e0d\u4f1a\u5728 <code data-no-translation=\"\">ls \/opt<\/code> \u8fd8\u662f <code data-no-translation=\"\">ls \/home<\/code>. \u770b\u5230\u5b83\u3002\u5b83\u6df1\u85cf\u5728 <code data-no-translation=\"\">\/var\/lib\/docker\/volumes\/...<\/code>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/dps.media\/wp-content\/uploads\/mcp\/2026\/01\/volume_to_folder_concept_1768127348760.jpg\" alt=\"\u5c06Docker Volume\u8f6c\u6362\u4e3a\u672c\u5730\u6587\u4ef6\u5939\" title=\"\"><figcaption>\u6218\u672f\uff1a\u4ece\u5c01\u95ed Volume \u8f6c\u5411\u5f00\u653e\u6587\u4ef6\u5939<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u5728\u4f60\u60f3\u8981\u5907\u4efd\uff08\u5fc5\u987b\u4f7f\u7528\u4e13\u7528\u7684 volume \u5907\u4efd\u547d\u4ee4\uff09\u6216\u76f4\u63a5\u4fee\u6539\u914d\u7f6e\u65f6\u4f1a\u9020\u6210\u56f0\u96be\u3002\u6211\u4eec\u4eca\u5929\u7684\u6218\u672f\u662f\uff1a <strong>\u91ca\u653e\u6570\u636e<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6b65\u9aa41\uff1a \u201c\u4fa6\u63a2\u201d Docker \u2013 \u67e5\u627e\u6570\u636e &amp; \u5bc6\u7801<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u8fc1\u79fb\u4e4b\u524d\uff0c\u4f60\u5fc5\u987b\u77e5\u9053\u6570\u636e\u4f4d\u4e8e\u4f55\u5904\u4ee5\u53ca\u6253\u5f00\u5b83\u7684\u94a5\u5319\uff08\u5bc6\u7801\uff09\u662f\u4ec0\u4e48\u3002\u5f88\u591a\u60c5\u51b5\u4e0b\u8fc1\u79fb\u5b8c\u6210\u540e\u5fd8\u8bb0\u4e86\u65e7\u6570\u636e\u5e93\u5bc6\u7801\uff0c\u5bfc\u81f4\u65b0 Metabase \u65e0\u6cd5\u8bfb\u53d6\u6570\u636e\u3002.<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u5728 <strong>\u65e7 VPS<\/strong>, \u8bf7\u4f7f\u7528\u547d\u4ee4 <code data-no-translation=\"\">docker inspect<\/code> \u6765\u67e5\u770b\u4fe1\u606f\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/dps.media\/wp-content\/uploads\/mcp\/2026\/01\/docker_inspect_secrets_1768127332437.jpg\" alt=\"\u4f7f\u7528Docker Inspect\u67e5\u627e\u5bc6\u7801\" title=\"\"><figcaption>\u5728\u73af\u5883\u53d8\u91cf\u4e2d\u67e5\u627e\u9690\u85cf\u7684\u6570\u636e\u5e93\u5bc6\u7801<\/figcaption><\/figure>\n<\/div>\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code data-no-translation=\"\"># 1. T\u00ecm m\u1eadt kh\u1ea9u Database (Quan tr\u1ecdng nh\u1ea5t!)\ndocker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' metabase_container_name | grep MB_DB_PASS\n\n# 2. X\u00e1c \u0111\u1ecbnh ch\u00ednh x\u00e1c \u0111\u01b0\u1eddng d\u1eabn Volume\ndocker inspect -f '{{ json .Mounts }}' metabase_db_container_name<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8bf7\u8bb0\u5f55\u4e0b\u5bc6\u7801\u5b57\u7b26\u4e32\uff08\u4f8b\u5982\uff1a <code data-no-translation=\"\">ExAmPlE_P@ssw0rd...<\/code>) \u548c\u6e90 volume \u8def\u5f84\uff08\u4f8b\u5982\uff1a <code data-no-translation=\"\">\/var\/lib\/docker\/volumes\/metabase_data\/_data<\/code>\uff09\u3002\u6211\u4eec\u5c06\u5728\u540e\u7eed\u6b65\u9aa4\u4e2d\u4f7f\u7528\u5b83\u4eec\u3002.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6b65\u9aa42\uff1a Rsync \u2013 \u6570\u636e\u7684\u5927\u8fc1\u5f99<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u786e\u5b9a\u4e86\u65e7VPS\u4e0a\u6570\u636e\u7684\u201c\u5bb6\u5ead\u5730\u5740\u201d\u540e\uff0c\u6211\u4eec\u5c06\u4f7f\u7528 <code data-no-translation=\"\">rsync<\/code> \u76f4\u63a5\u5c06\u5176\u4f20\u8f93\u5230\u65b0VPS\u3002\u5728\u65b0VPS\u4e0a\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u5408\u9002\u7684\u6587\u4ef6\u5939\u6765\u63a5\u6536\u5b83\u3002.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5728\u65b0VPS\u4e0a\uff1a<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code data-no-translation=\"\">mkdir -p \/opt\/metabase\/pgdata<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5728\u65e7VPS\u4e0a\uff08\u8fd0\u884crsync\u547d\u4ee4\uff09\uff1a<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code data-no-translation=\"\"># L\u01b0u \u00fd \u0111\u01b0\u1eddng d\u1eabn ngu\u1ed3n l\u1ea5y t\u1eeb b\u01b0\u1edbc 1\n# IP_VPS_MOI: Thay b\u1eb1ng IP server m\u1edbi\n\nrsync -avzP \/var\/lib\/docker\/volumes\/metabase_data\/_data\/ root@IP_VPS_MOI:\/opt\/metabase\/pgdata\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b64\u65f6\uff0c\u60a8\u5b9d\u8d35\u7684\u6570\u636e\u5df2\u5b89\u5168\u5730\u5b58\u653e\u5728\u6587\u4ef6\u5939\u4e2d <code data-no-translation=\"\">\/opt\/metabase\/pgdata<\/code> \u5728\u65b0\u670d\u52a1\u5668\u4e0a\u3002\u5b83\u5df2\u6210\u4e3a\u60a8\u53ef\u4ee5\u770b\u5230\u3001\u590d\u5236\u548c\u5907\u4efd\u7684\u7269\u7406\u6587\u4ef6\uff01<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6b65\u9aa43\uff1a \u642d\u5efa\u65b0\u5bb6 (Docker Compose \u5e72\u51c0\u8bbe\u7f6e)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0e\u5176\u91cd\u590d\u4f7f\u7528\u65e7\u7684\u6742\u4e71\u914d\u7f6e\uff0c\u6211\u4eec\u5c06\u7f16\u5199\u4e00\u4e2a <code data-no-translation=\"\">docker-compose.yml<\/code> \u65b0\u6587\u4ef6\uff0c\u66f4\u5e72\u51c0\u3001\u66f4\u6807\u51c6\u3002\u8fd9\u4e2a\u6587\u4ef6\u5c06\u8fde\u63a5Metabase\u5e94\u7528\u7a0b\u5e8f\u4e0e\u6211\u4eec\u521a\u521a\u8fc1\u79fb\u7684\u6570\u636e\u5e93\u6570\u636e\u3002.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/dps.media\/wp-content\/uploads\/mcp\/2026\/01\/metabase_compose_structure_1768127364396.jpg\" alt=\"\u65b0 Docker Compose Metabase \u7ed3\u6784\" title=\"\"><figcaption>\u8fde\u63a5\u6a21\u578b\uff1aApp -&gt; Database -&gt; Local Folder<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u521b\u5efa\u6587\u4ef6 <code data-no-translation=\"\">\/opt\/metabase\/docker-compose.yml<\/code> \u5185\u5bb9\u5982\u4e0b\uff08\u8bb0\u5f97\u5c06PASSWORD\u66ff\u6362\u4e3a\u6b65\u9aa41\u4e2d\u627e\u5230\u7684\u5bc6\u7801\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code data-no-translation=\"\">version: '3.9'\nservices:\n  metabase:\n    image: metabase\/metabase:latest\n    container_name: metabase\n    restart: unless-stopped\n    ports:\n      - \"3000:3000\"\n    environment:\n      MB_DB_TYPE: postgres\n      MB_DB_DBNAME: metabase\n      MB_DB_PORT: 5432\n      MB_DB_USER: metabase\n      MB_DB_PASS: YOUR_SECRET_PASSWORD_HERE\n      MB_DB_HOST: metabase-db\n    depends_on:\n      - metabase-db\n\n  metabase-db:\n    image: postgres:15\n    container_name: metabase-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: metabase\n      POSTGRES_DB: metabase\n      POSTGRES_PASSWORD: YOUR_SECRET_PASSWORD_HERE\n    volumes:\n      # K\u1ebeT N\u1ed0I QUAN TR\u1eccNG NH\u1ea4T:\n      # Mount folder d\u1eef li\u1ec7u v\u1eeba rsync v\u00e0o trong database\n      - .\/pgdata:\/var\/lib\/postgresql\/data<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u7136\u540e\u542f\u52a8\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code data-no-translation=\"\">docker compose up -d<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u6b65\u9aa44\uff1a \u914d\u7f6e\u57df\u540d &amp; SSL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528 <strong>Nginx Proxy Manager<\/strong> \uff08\u60a8\u5df2\u5728\u4e4b\u524d\u7684\u6307\u5357\u4e2d\u5b89\u88c5\uff09\u4ee5\u5b89\u5168\u5730\u5c06Metabase\u516c\u5f00\u5230\u4e92\u8054\u7f51\u3002.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u57df\u540d\uff1a<\/strong> <code data-no-translation=\"\">data.your-domain.com<\/code><\/li>\n<li><strong>Forward IP:<\/strong> <code data-no-translation=\"\">172.17.0.1<\/code><\/li>\n<li><strong>Forward Port:<\/strong> <code data-no-translation=\"\">3000<\/code><\/li>\n<li><strong>SSL:<\/strong> Let\u2019s Encrypt (Force SSL)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/dps.media\/wp-content\/uploads\/mcp\/2026\/01\/metabase_success_dashboard_1768127381275.jpg\" alt=\"Metabase \u5728\u65b0 VPS \u4e0a\u6210\u529f\u8fd0\u884c\" title=\"\"><figcaption>\u7cfb\u7edf\u8fd0\u884c\u5b8c\u7f8e\uff0c\u4eea\u8868\u677f\u6570\u636e\u5b8c\u597d\u65e0\u635f<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">\u603b\u7ed3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i t\u1eeb Docker Managed Volume sang Bind Mount (Folder) kh\u00f4ng ch\u1ec9 gi\u00fap b\u1ea1n migrate th\u00e0nh c\u00f4ng m\u00e0 c\u00f2n l\u00e0 m\u1ed9t b\u01b0\u1edbc n\u00e2ng c\u1ea5p l\u1edbn cho vi\u1ec7c qu\u1ea3n tr\u1ecb h\u1ec7 th\u1ed1ng. T\u1eeb nay v\u1ec1 sau, vi\u1ec7c backup d\u1eef li\u1ec7u Metabase ch\u1ec9 \u0111\u01a1n gi\u1ea3n l\u00e0 copy folder <code data-no-translation=\"\">\/opt\/metabase\/pgdata<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u795d\u60a8\u5728\u65b0\u5bb6\u4e2d\u62e5\u6709\u5f3a\u5927\u7a33\u5b9a\u7684\u5546\u4e1a\u667a\u80fd\u7cfb\u7edf\uff01<\/p>","protected":false},"excerpt":{"rendered":"<p>\u4f60\u66fe\u7ecf\u8fc1\u79fb\u8fc7\u4e00\u4e2a\u590d\u6742\u7684 Supabase \u7cfb\u7edf\uff0c\u73b0\u5728\u662f\u65f6\u5019\u9762\u5bf9\u4e0b\u4e00\u4e2a\u6311\u6218\uff1aMetabase\u3002\u5982\u679c Supabase \u5c06\u6570\u636e\u6e05\u6670\u5730\u5b58\u50a8\u5728 bind-mount \u6587\u4ef6\u5939\u4e2d\uff0c\u90a3\u4e48 Metabase \u9ed8\u8ba4\u60c5\u51b5\u4e0b\u901a\u5e38\u5c06\u6570\u636e\u5c0f\u5fc3\u5730\u9690\u85cf\u5728\u65e0\u5f62\u7684 Docker Volumes \u4e2d\u3002\u8fd9\u4f7f\u5f97 [\u2026]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-35748","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"acf":[],"rankmath_keywords":{"primary":"","secondary":[""]},"yoast_keywords":{"primary":"","secondary":[]},"yoast_focuskw":"","rankmath_focuskw":"","seo_keywords":{"primary":"","secondary":[""]},"_links":{"self":[{"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/posts\/35748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/comments?post=35748"}],"version-history":[{"count":0,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/posts\/35748\/revisions"}],"wp:attachment":[{"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/media?parent=35748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/categories?post=35748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/tags?post=35748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}