你是否曾经迁移过一个复杂的 Supabase 系统,现在是时候面对下一个挑战: Metabase. 。如果 Supabase 将数据明确存储在 bind-mount 文件夹中,那么 Metabase 默认情况下通常将数据小心隐藏在 Docker Volumes 隐形之中。这使得备份或迁移到新 VPS 对于非专业人士来说变得更加“棘手”。.
在本文中,我们将一起解决这个问题:如何从旧 VPS 深处隐藏的 Docker Volume 中“拔出”整个 Metabase 数据(图表、仪表板、用户),迁移到一个全新的 VPS,特别是将其转换为文件夹 (Bind Mount) 形式,以便以后更容易永久管理。.
问题: “隐形”数据 (Docker Volumes)
当你使用命令安装 Metabase 时 docker run 或者网络上的 compose 示例文件,数据通常存储在 Docker Volume (Managed Volume) 中。你不会在 ls /opt 还是 ls /home. 看到它。它深藏在 /var/lib/docker/volumes/....

这在你想要备份(必须使用专用的 volume 备份命令)或直接修改配置时会造成困难。我们今天的战术是: 释放数据.
步骤1: “侦探” Docker – 查找数据 & 密码
在迁移之前,你必须知道数据位于何处以及打开它的钥匙(密码)是什么。很多情况下迁移完成后忘记了旧数据库密码,导致新 Metabase 无法读取数据。.
在 旧 VPS, 请使用命令 docker inspect 来查看信息:

# 1. 查找数据库密码 (最重要!)
docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' metabase_container_name | grep MB_DB_PASS
# 2. 精确确定 Volume 路径
docker inspect -f '{{ json .Mounts }}' metabase_db_container_name请记录下密码字符串(例如: ExAmPlE_P@ssw0rd...) 和源 volume 路径(例如: /var/lib/docker/volumes/metabase_data/_data)。我们将在后续步骤中使用它们。.
步骤2: Rsync – 数据的大迁徙
在确定了旧VPS上数据的“家庭地址”后,我们将使用 rsync 直接将其传输到新VPS。在新VPS上,我们将创建一个合适的文件夹来接收它。.
在新VPS上:
mkdir -p /opt/metabase/pgdata在旧VPS上(运行rsync命令):
# 注意源路径来自步骤1
# IP_VPS_MOI: 替换为新服务器IP
rsync -avzP /var/lib/docker/volumes/metabase_data/_data/ root@IP_VPS_MOI:/opt/metabase/pgdata/此时,您宝贵的数据已安全地存放在文件夹中 /opt/metabase/pgdata 在新服务器上。它已成为您可以看到、复制和备份的物理文件!
步骤3: 搭建新家 (Docker Compose 干净设置)
与其重复使用旧的杂乱配置,我们将编写一个 docker-compose.yml 新文件,更干净、更标准。这个文件将连接Metabase应用程序与我们刚刚迁移的数据库数据。.

创建文件 /opt/metabase/docker-compose.yml 内容如下(记得将PASSWORD替换为步骤1中找到的密码):
version: '3.9'
services:
metabase:
image: metabase/metabase:latest
container_name: metabase
restart: unless-stopped
ports:
- "3000:3000"
environment:
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER: metabase
MB_DB_PASS: YOUR_SECRET_PASSWORD_HERE
MB_DB_HOST: metabase-db
depends_on:
- metabase-db
metabase-db:
image: postgres:15
container_name: metabase-db
restart: unless-stopped
environment:
POSTGRES_USER: metabase
POSTGRES_DB: metabase
POSTGRES_PASSWORD: YOUR_SECRET_PASSWORD_HERE
volumes:
# 最重要的连接:
# 将刚刚rsync的数据文件夹挂载到数据库中
- ./pgdata:/var/lib/postgresql/data然后启动:
docker compose up -d步骤4: 配置域名 & SSL
使用 Nginx Proxy Manager (您已在之前的指南中安装)以安全地将Metabase公开到互联网。.
- 域名:
data.your-domain.com - Forward IP:
172.17.0.1 - Forward Port:
3000 - SSL: Let’s Encrypt (Force SSL)

总结
从Docker Managed Volume转换为Bind Mount(文件夹)不仅帮助您成功迁移,还大大提升了系统管理。从今以后,备份Metabase数据只需简单复制文件夹 /opt/metabase/pgdata.
祝您在新家中拥有强大稳定的商业智能系统!

