koni blog

東京のウェブエンジニア koni です!ウェブサービスをガシガシ作っていきます!

Metabase をDocker で入れた場合にデータを消さずにアップグレードする手順

Upgrading Metabase に書いてあるが、ざっくりすぎるので もうちょっとちゃんと書いておく。

Docker もっと慣れていきたい。

事前準備(DBのデータをローカルにマウントしていない場合)

metabase のデータ(作成したダッシュボードなどのデータ)は、H2というファイルに書かれる仕組みになっている。 最初に起動するときに docker run -d -p 3000:3000 --name metabase metabase/metabase このコマンドで起動した場合、 このデータはコンテナに含まれてしまうため、イメージを変えた(metabaseのアップデート)の際に永続化できない。

そこで、まずローカルファイルシステムのフォルダを指定しておき、Dockerコンテンを起動する際にマウントすることにしたい。

まずそれまで使っていたデータをコピーする。

$ cd ~
$ mkdir metabase-data
$ docker cp CONTAINER_ID:/metabase-data/metabase.db ./

最新のイメージをpull

$ docker pull metabase/metabase:latest

新しいイメージで起動

$ docker ps
$ docker stop metabase # コンテナ名は上のpsコマンドで表示されたものを入れる
$ docker rename metabase metabase_old #コンテナ名かぶるというエラーが表示されてしまうのでリネームしておく。

リネームしないと以下のようなエラーが出る。

docker: Error response from daemon: Conflict. The container name "/metabase" is already in use by container "1bbaaf5d3cca4a0cc402a5369e3f6036168a81b6b1e27d939301a67a383f8116". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

新しいイメージで起動

$ docker run -d -p 80:3000 \
-v ~/metabase-data:/metabase-data \
-e "MB_DB_FILE=/metabase-data/metabase.db" \
--name metabase metabase/metabase

バージョン確認

/admin/settings/updates にアクセスしてバージョン上がっていればOK

f:id:konisimple:20191126144741p:plain

参考資料

www.metabase.com

www.metabase.com