UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Docker】localhost:9200でアクセスできるESにdocker上のKibanaからアクセスしたい(その2)

前回に引き続いて、localhost:9200 でアクセスできるESに対して、docker上のKibanaからアクセスする方法を探している

前回は自IPアドレスを使えばできることがわかったが、localhostへのアクセスはできなかった

既にアプリ側の設定ファイルでESのホスト名をlocalhostにしており、これを自IPにするのは環境変数を使ったとしてもちょっと手間と感じていた

uga-box.hatenablog.com

しかし、引き続き調査していたところ、バッチリな解決策がみつかった

解決策:host.docker.internal を使う

公式のドキュメントに書いてあった

Networking features in Docker Desktop for Mac | Docker Documentation

I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST
The host has a changing IP address (or none if you have no network access). From 18.03 onwards our recommendation is to connect to the special DNS name host.docker.internal, which resolves to the internal IP address used by the host. This is for development purpose and will not work in a production environment outside of Docker Desktop for Mac.
The gateway is also reachable as gateway.docker.internal.

本番環境では使えないが、Docker Desktop for Mac ならば localhost の代わりにhost.docker.internalを使うとホストOSのlocalhostにアクセスすることができるとのこと

なのでKibanaのdocker-compose.ymlをこのようにする

version: '3'
services:
  kibana:
    image: "docker.elastic.co/kibana/kibana:6.5.4"
    ports:
      - "5601:5601"
    environment:
      ELASTICSEARCH_URL: "http://host.docker.internal:9200"

これでESもIAP使ってlocalhostで接続して、アプリ側でもlocalhostでアクセスすることができるようになった

※参考

Networking features in Docker Desktop for Mac | Docker Documentation

Docker コンテナからホストにアクセスする - 失敗は一時の恥