docker上のredashとローカルのmysqlを連携させる


docker上に立てたredashとローカルのmysqlを連携させるのに少し苦労したので方法を残しておこうと思います

  • redashとは

    • OSSで提供されているダッシュボード作成ツール
    • データをredashに連携させる事でコードなどを書かずにデータをグラフ化することができます
  • 今回の目的

    • docker上に立てたredashとMacpcのローカルで起動しているmysqlを連携させる
    • mysqlのデータをredashでグラフ化させる (redash自体の開発は行わない想定です)

git clone
git clone https://github.com/GitSumito/redash-v7.git
*バージョン8が最も最新ですがバグが多く出たため、バージョン7をクローンしています
またdockerのbuild時にエラーが多く発生したためbuild済みのものをクローンしています

環境変数の設定(postgresに認証なしにアクセスできるようにする)
redash.envファイルに
POSTGRES_HOST_AUTH_METHOD=trust
を加筆することでpostgresアクセス時に出てしまうauthのエラーが出なくなりますが用途によって使い分けてください

コンテナの起動
docker-compose run --rm server create_db
dbにddlを流し込む
docker-compose up -d
コンテナを起動
*ログが見たい場合はdocker-compose upでコマンド実行してください

redashへのアクセス
http://localhost指定したportにアクセス
redashの登録画面が表示されたら情報を入力して[Setup]で登録

データベースとの連携
Setupが完了すると下記画面に遷移します

データベース連携に使用するのは真ん中のこの部分です

*画像には斜線が引いてありますが初期状態では引いていない状態で正しいです

1.Connect a Data Sourceを押下

mysqlをリソースとして指定した画面の後でこのような画面が表示されると思います
ここでHosthost.docker.internalと入力
UserPasswordのところにはmysqlの情報を入力

保存

[save]ボタンを押下
dashboardに戻り2.Create your first queryを押してデータが連携されていれば完了です

補足

なぜHostがhost.docker.internalのような文字列になるのでしょうか?
それはdockerとMacは友達ですが、dockerとmysqlは友達の友達
つまり、他人なのでdockerから直にmysqlを連携することが出来ないからです

×docker→mysql
○docker→Macポート→mysql

そこで一度Macのポートを経由する必要があります
そこでMacのポートに当たるのがhost.docker.internalです

*ちなみにhost.docker.internalはdockerだけが知っているポート、向き先のためMacからアクセスしようとしてもアクセスはできないので下のような画面になってしまいます

これからもhost.docker.internalに助けられることが多そうです!

誤り等あればコメントお願いします!

おしまい!