docker nginxでcontainer --> hostへプロキシしたい
前提
- 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