
docker コンテナからホストのポートにアクセスするには?
ようするに、ドッカーコンテナを2つ立ち上げて、ドッカーコンテナAからドッカーコンテナBのポートにアクセスするには設定が必要です。
①リバースプロキシの nginx のコンテナを docker-compose で起動する。
②それとは別に apache のコンテナを docker-compose で起動する。
コンテナからホストにアクセスするには、ドッカーコンポーズのファイルに「host.docker.internal:host-gateway」を書くことは分かった。
nginxコンテナ から apacheコンテナ へは ping が届くことも確認した。
しかし、nginx から apache のポートにアクセスすると
「curl: (7) Failed to connect to 192.168.1.135 port 6080 after 0 ms: Couldn’t connect to server」
というエラーになった。
次に、nginxコンテナ から apacheコンテナ に nmap を実行して空いているポートがあるかを確認した。
apt install nmap
nmap apache
そうすると ssh だけがアクセスできることが分かった。
ssh にアクセスできるということは、iptables のルールの問題だと分かった。
chatgpt を使いポートの開け方を調べた。
「ufw allow 6080/tcp」ここにたどり着いた。
この対応、うっかり忘れそうですが重要ですね。ハマるポイントですね。

docker-compose.yml には、こちらを定義しておく。
extra_hosts:
- "host.docker.internal:host-gateway"
リバースプロキシには以下のように、ホストの6080番にアクセスするようにするが、エラーになる。
location / {
proxy_pass http://host.docker.internal:6080;
}
ホストの6080番のポートを開ける。
ufw allow 6080/tcp
以上