前回に引き続いて、localhost:9200
でアクセスできるESに対して、docker上のKibanaからアクセスする方法を探している
前回は自IPアドレスを使えばできることがわかったが、localhost
へのアクセスはできなかった
既にアプリ側の設定ファイルでESのホスト名をlocalhostにしており、これを自IPにするのは環境変数を使ったとしてもちょっと手間と感じていた
しかし、引き続き調査していたところ、バッチリな解決策がみつかった
解決策: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