docker nginxでcontainer --> hostへプロキシしたい

https://cdn-ak.f.st-hatena.com/images/fotolife/q/quoll00/20160722/20160722142617.jpg

前提

  • docker-composeを使う
  • nginxはコンテナを使う
  • host(mac)上でNodejsサーバが動いている
  • browser --> nginx --> nodejs という通信を実現したい

課題1

  • Nginx側でプロキシする先のIPがわからない。具体的には proxy_passで設定するIPのこと
  • host側で ifconfig en0 | grep "inet " | cut -d " " -f2 --> 10.13.165.28 のように取得できるIPを設定する必要がある

手段1

素直にIPをdocker-compose.ymlに直書き。欠点はIPが環境によってかわること

Dockerコンテナ内部からホストのSMTPを利用したい - Qiita

手段2

直書きではなく頑張って、動的にhostのIPを取得して、nginxのconfigファイルに渡す。どうやって…?

コンテナ内からホストのIPを知るコマンド。172.18.0.1のようなアドレスが取得できるが下記のようなエラーになる。macが持つrealなprivate ipが取得できていないから? 192.168.xx.xx or 10.13.xx.xxみたいなやつがほしい。

/sbin/ip route|awk '/default/ { print $3 }'
/ # wget 172.18.0.1:1337 -O -
Connecting to 172.18.0.1:1337 (172.18.0.1:1337)
wget: can't connect to remote host (172.18.0.1): Connection refused

ちなみにmac側で自分のprivate ipを知るコマンド

ifconfig en0 | grep "inet " | cut -d " " -f2
ipconfig getifaddr en0

この辺が答えになるかも。 How to get the IP address of the docker host from inside a docker container - Stack Overflow

核心に迫ってきた。nginxの設定ファイル Document how to connect to Docker host from container · Issue #1143 · docker/docker · GitHub

172.18.xx.xxは何者?

Dockerのネットワークを理解するために覚えたことまとめ - Carpe Diem

そして最後は公式ドキュメント

Networking features in Docker for Mac - Docker

  • ifconfigip adocker0というネットワークが見えるはずだが、macだと見えない
  • I want to connect from a container to a service on the hostに書いてあった。LinuxOSなら、手段2のコマンドで普通に通信できるようだが、macだとまだ無理とのこと