Docker Compose で Metabase と PostgreSQL を設定


はじめに

やっぱり Metabase いいですね、あらためてダッシュボード作りはじめました

やること

さくっと動かす

  1. git clone
  2. env にあるファイルにパスワードやシークレットなどをお好みで設定
  3. docker-compose up -d 
  4. ブラウザ開いて localhost:3000Metabase へ接続
$ git clone https://github.com/narutaro/metabase-with-postgres.git
$ tree
:
 metabase-with-postgres
  ├── README.md
  ├── db
  ├── docker-compose.yml
  ├── env
  │   ├── metabase_database.env
  │   └── postgres.env
  └── services
      └── postgres
          ├── 00_metabase_create_user.sh
          └── 01_metabase_create_db.sh

docker-compose.yml

docker-compose.yml
version: "3.8"

services:

  postgres:
    container_name: postgres
    hostname: postgres 
    restart: "always"
    image: postgres
    env_file:
      - ./env/postgres.env
    volumes:
      - ./services/postgres/:/docker-entrypoint-initdb.d/
      - ./db/:/var/lib/postgresql/data/

  pgc:
    container_name: pgc
    hostname: pgc 
    image: postgres
    env_file:
      - ./env/postgres.env

  metabase:
    container_name: metabase
    hostname: metabase
    restart: "always"
    image: metabase/metabase
    env_file:
      - ./env/metabase_database.env
    ports:
      - 3000:3000

pgc は postgres への外部から(コンテナ間)の接続確認のために psql クライアントとしてつかってました。なくても動く

$ docker-compose up -d
:
:
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
9b7aa5b9538c        postgres            "docker-entrypoint.s…"   2 days ago          Up 7 hours          5432/tcp                 pgc
836845b6c4f8        postgres            "docker-entrypoint.s…"   3 days ago          Up 7 hours          5432/tcp                 postgres
c5f31f407675        metabase/metabase   "/app/run_metabase.sh"   3 days ago          Up 7 hours          0.0.0.0:3000->3000/tcp   metabase

環境変数のヒント

  1. MB_ENCRYPTION_SECRET_KEYは短いとおこられる。Assert failed: MB_ENCRYPTION_SECRET_KEY must be at least 16 characters.
  2. POSTGRES_PASSWORD は必須。設定しないと postgres は上がってこない
  3. 接続先は(IPアドレスじゃなくて)コンテナ名を書いておくと docker-compose なのでよきにはからってくれる(DNSで名前解決してくれる)
  4. つまったら、とりえあず docker logs metabase -f する

Cheers,