在 Docker 上執行 Metabase
若要取得快速、可靠且安全的部署,且無需自行託管帶來的工作或隱藏成本,請查看 Metabase Cloud。
Metabase 透過 Dockerhub 提供官方 Docker 映像檔,可用於在任何執行 Docker 的系統上進行部署。
如果您嘗試在 Docker 上升級 Metabase 版本,請查看這些升級說明。
Open Source 快速入門
使用此快速入門在本機執行 Open Source 版本的 Metabase。請參閱下方關於在正式環境中執行 Metabase 的說明。
假設您已安裝並執行 Docker,請取得最新的 Docker 映像檔
docker pull metabase/metabase:latest
然後啟動 Metabase 容器
docker run -d -p 3000:3000 --name metabase metabase/metabase
這將依預設在連接埠 3000 上啟動 Metabase 伺服器。
選用:若要檢視 Open Source Metabase 初始化時的記錄,請執行
docker logs -f metabase
啟動完成後,您可以在 https://127.0.0.1:3000
存取您的 Open Source Metabase。
若要在不同的連接埠上執行您的 Open Source Metabase,例如連接埠 12345
docker run -d -p 12345:3000 --name metabase metabase/metabase
Pro 或 Enterprise 快速入門
如果您有 授權權杖 適用於 Pro 或 Enterprise 版本 的 Metabase,並且想要在本機執行 Metabase,請使用此快速入門。請參閱下方關於在正式環境中執行 Metabase 的說明。
假設您已安裝並執行 Docker,請取得最新的 Docker 映像檔
docker pull metabase/metabase-enterprise:latest
然後啟動 Metabase 容器
docker run -d -p 3000:3000 --name metabase metabase/metabase-enterprise
這將依預設在連接埠 3000 上啟動 Metabase 伺服器。
選用:若要檢視 Metabase 初始化時的記錄,請執行
docker logs -f metabase
啟動完成後,您可以在 https://127.0.0.1:3000
存取您的 Pro 或 Enterprise Metabase。
若要在不同的連接埠上執行您的 Pro 或 Enterprise Metabase,例如連接埠 12345
docker run -d -p 12345:3000 --name metabase metabase/metabase-enterprise
正式環境安裝
Metabase 隨附內嵌 H2 資料庫,該資料庫使用檔案系統來儲存自己的應用程式資料。這表示,如果您移除容器,您將遺失您的 Metabase 應用程式資料 (您的問題、儀表板、集合等等)。
如果您想要在正式環境中執行 Metabase,您需要將應用程式資料儲存在適用於正式環境的資料庫中。
一旦您佈建了資料庫 (例如 Postgres) 供 Metabase 用於儲存其應用程式資料,您只需要提供 Metabase 連線資訊和認證,Metabase 即可連線至該資料庫。
在正式環境中執行 Docker
假設您透過執行以下指令設定了 Postgres 資料庫
createdb metabaseappdb
無需新增任何表格;Metabase 會在啟動時建立這些表格。並且假設該資料庫可透過 my-database-host:5432
存取,使用者名稱為 name
,密碼為 password
。
以下是 Docker 命令範例,告知 Metabase 使用該資料庫
docker run -d -p 3000:3000 \
-e "MB_DB_TYPE=postgres" \
-e "MB_DB_DBNAME=metabaseappdb" \
-e "MB_DB_PORT=5432" \
-e "MB_DB_USER=name" \
-e "MB_DB_PASS=password" \
-e "MB_DB_HOST=my-database-host" \
--name metabase metabase/metabase
請記住,Metabase 將從您的 Docker 容器內部連線,因此請確保:a) 您使用完整合格的主機名稱,或 b) 您已在容器的 /etc/hosts file
中設定正確的項目。
遷移至正式環境安裝
如果您已經使用預設應用程式資料庫 (H2) 執行 Metabase,並且想要使用適用於正式環境的應用程式資料庫,而不會遺失您的應用程式資料 (您的問題、儀表板等),請參閱從 H2 遷移至正式版資料庫。
Docker Compose YAML 檔案範例
以下是使用 PostgreSQL 資料庫 metabaseappdb
執行 Metabase 的 docker-compose.yml
檔案範例
version: "3.9"
services:
metabase:
image: metabase/metabase:latest
container_name: metabase
hostname: metabase
volumes:
- /dev/urandom:/dev/random:ro
ports:
- 3000:3000
environment:
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabaseappdb
MB_DB_PORT: 5432
MB_DB_USER: metabase
MB_DB_PASS: mysecretpassword
MB_DB_HOST: postgres
networks:
- metanet1
healthcheck:
test: curl --fail -I https://127.0.0.1:3000/api/health || exit 1
interval: 15s
timeout: 5s
retries: 5
postgres:
image: postgres:latest
container_name: postgres
hostname: postgres
environment:
POSTGRES_USER: metabase
POSTGRES_DB: metabaseappdb
POSTGRES_PASSWORD: mysecretpassword
networks:
- metanet1
networks:
metanet1:
driver: bridge
其他 Docker 維護與設定
- 自訂 Metabase Jetty 伺服器
- Docker 專用環境變數
- 設定 Java 時區
- 複製應用程式資料庫
- 掛載對應的檔案儲存磁碟區
- 如果您停止容器,取回您的設定
- 新增外部依賴項或外掛程式
- 使用 Docker Secrets 隱藏敏感參數
- 疑難排解
- 繼續設定
自訂 Metabase Jetty 伺服器
您可以使用 自訂 Metabase Jetty Webserver 中的任何自訂設定,方法是在您的 Docker 執行命令中設定環境變數。
Docker 專用環境變數
除了標準自訂設定之外,還有兩個 Docker 專用環境變數 MUID
和 MGID
,用於設定 Metabase 在 Docker 容器中執行時使用的使用者和群組 ID。當檔案 (例如應用程式資料庫) 在主機和容器之間共用時,這些設定可讓檔案權限相符。
以下說明如何使用您的帳戶擁有並儲存在您主目錄中的資料庫檔案
docker run -d -v ~/my-metabase-db:/metabase.db --name metabase -e MB_DB_FILE=/metabase.db -e MUID=$UID -e MGID=$GID -p 3000:3000 metabase/metabase
設定 Java 時區
最好設定您的 Java 時區,使其符合您希望所有報表顯示的時區。您可以透過簡單地指定 JAVA_TIMEZONE
環境變數來完成此操作,Metabase 啟動腳本會擷取該變數。例如
docker run -d -p 3000:3000 \
-e "JAVA_TIMEZONE=US/Pacific" \
--name metabase metabase/metabase
複製應用程式資料庫
容器中應用程式資料庫的預設位置為 /metabase.db/metabase.db.mv.db
。您可以使用以下命令將此目錄複製出容器 (將 CONTAINER_ID
替換為實際的容器 ID 或名稱,如果您將容器命名為 metabase
,則替換為 metabase
)
docker cp CONTAINER_ID:/metabase.db ./
DB 內容將保留在名為 metabase.db 的目錄中。
掛載對應的檔案儲存磁碟區
若要將資料持久儲存在容器外部,並使其可在容器啟動之間使用,我們可以將本機檔案路徑掛載到容器內部。
docker run -d -p 3000:3000 \
-v ~/metabase-data:/metabase-data \
-e "MB_DB_FILE=/metabase-data/metabase.db" \
--name metabase metabase/metabase
當您啟動容器時,Metabase 將會使用資料庫檔案 (MB_DB_FILE
),其位於 ~/metabase-data/metabase.db
,而不是其預設位置。 我們將該資料夾從本機檔案系統掛載到容器中。
如果您停止容器,取回您的設定
如果您先前已使用本機資料庫執行並設定 Metabase,然後停止容器,您的資料仍會存在,除非您使用 docker rm
命令刪除了容器。 若要復原您先前的設定
1. 使用 docker ps -a
命令尋找已停止的容器。 它看起來會像這樣
docker ps -a | grep metabase
ca072cd44a49 metabase/metabase "/app/run_metabase.sh" About an hour ago Up About an hour 0.0.0.0:3000->3000/tcp metabase
02e4dff057d2 262aa3d0f714 "/app/run_metabase.sh" 23 hours ago Exited (0) 23 hours ago pedantic_hypatia
0d2170d4aa4a 262aa3d0f714 "/app/run_metabase.sh" 23 hours ago Exited (0) 23 hours ago stoic_lumiere
一旦您識別出包含您設定的已停止容器,請從最左欄儲存容器 ID,以進行下一步。
2. 使用 docker commit
從已停止的容器建立一個新的自訂 Docker 映像檔,其中包含您的設定。
docker commit ca072cd44a49 mycompany/metabase-custom
sha256:9ff56186de4dd0b9bb2a37c977c3a4c9358647cde60a16f11f4c05bded1fe77a
3. 使用 docker run
執行您的新映像檔,以再次啟動並執行。
docker run -d -p 3000:3000 --name metabase mycompany/metabase-custom
430bb02a37bb2471176e54ca323d0940c4e0ee210c3ab04262cb6576fe4ded6d
您應該會恢復您先前設定的 Metabase 安裝。 如果它不是您預期的版本,請嘗試不同的已停止容器並重複這些步驟。
新增外部依賴項或外掛程式
若要新增外部依賴 JAR 檔案,例如 Oracle 或 Vertica JDBC 驅動程式,或第三方 Metabase 驅動程式,您需要
- 在您的主機系統中建立一個
plugins
目錄,以及 - 繫結該目錄,使其可作為路徑
/plugins
供 Metabase 使用 (使用--mount
或-v
/--volume
)。
例如,如果您的主機系統上有一個名為 /path/to/plugins
的目錄,您可以依照以下方式使用 --mount
選項使其內容可供 Metabase 使用
docker run -d -p 3000:3000 \
--mount type=bind,source=/path/to/plugins,destination=/plugins \
--name metabase metabase/metabase
請注意,Metabase 將使用此目錄來解壓縮與預設 Metabase 發行版捆綁在一起的外掛程式(例如各種資料庫(如 SQLite)的驅動程式),因此 Docker 必須可讀寫此目錄。
使用 Docker Secrets 隱藏敏感參數
為了讓您的連線參數不被輕易看見,您可以使用 Docker Secrets 將所有參數放入檔案中,以便 Docker 可以在啟動容器之前讀取並將它們載入記憶體中。
以下是一個範例 docker-compose.yml
檔案,用於啟動一個 Metabase Docker 容器,其中包含用於連線到 PostgreSQL 資料庫的 secrets。
除了這個範例 yml 檔案之外,您還需要建立兩個檔案
db_user.txt
db_password.txt
這些檔案應該與 docker-compose.yml
位於同一個目錄中。 將 db_user
放入 db_user.txt
檔案中,並將 db_password 放入 db_password.txt
檔案中。
請注意具有 secret 的環境變數上的“_FILE”
version: "3.9"
services:
metabase:
image: metabase/metabase:latest
container_name: metabase
hostname: metabase
volumes:
- /dev/urandom:/dev/random:ro
ports:
- 3000:3000
environment:
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER_FILE: /run/secrets/db_user
MB_DB_PASS_FILE: /run/secrets/db_password
MB_DB_HOST: postgres
networks:
- metanet1
secrets:
- db_password
- db_user
healthcheck:
test: curl --fail -I https://127.0.0.1:3000/api/health || exit 1
interval: 15s
timeout: 5s
retries: 5
postgres:
image: postgres:latest
container_name: postgres
hostname: postgres
environment:
POSTGRES_USER_FILE: /run/secrets/db_user
POSTGRES_DB: metabase
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
networks:
- metanet1
secrets:
- db_password
- db_user
networks:
metanet1:
driver: bridge
secrets:
db_password:
file: db_password.txt
db_user:
file: db_user.txt
我們目前支援以下 環境變數 作為 secrets 使用
MB_DB_USER
MB_DB_PASS
MB_DB_CONNECTION_URI
MB_EMAIL_SMTP_PASSWORD
MB_EMAIL_SMTP_USERNAME
MB_LDAP_PASSWORD
MB_LDAP_BIND_DN
為了讓 Metabase 容器讀取檔案並將內容用作 secret,環境變數名稱需要附加“_FILE”,如上所述。
疑難排解
請參閱 疑難排解指南 中的「執行 Metabase」。
繼續設定
現在您已經安裝了 Metabase,是時候 設定它並將其連線到您的資料庫 了。
閱讀其他 Metabase 版本 的文件。