こちらの「8080」番ポートですが、接続先のポート番号と理解しています。
その場合、接続先=コンテナ側のポート番号となり、80番ポートを指定しなくてはならないのではないでしょうか?
docker のコンテナは docker0 という仮想ネットワークに接続されていて、ホストとは通信できますが、外部とは通信できません。docker デーモンはホストが受信したパケットを Destination NAT (和訳すると宛先アドレス変換)という技術を使用して、IPパケットの宛先アドレスを書き換えてから、 docker0 に転送しています。
(コンテナの状況によってdoker0 という名前でない場合もありますが、詳細省略)
Linux のホストをご利用であれば、ホストで iptables コマンドを叩くことで Destination NAT の様子を見ることができます。
$ sudo iptables -L -v -n -t nat
Chain PREROUTING (policy ACCEPT 3799K packets, 289M bytes)
pkts bytes target prot opt in out source destination
25M 1813M DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
(省略)
Chain DOCKER (1 references)
pkts bytes target prot opt in out source destination
100 100 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.21.34.9:80
-t nat
というオプションでNAT用のテーブルを表示します
- PREROUTING というチェインで Destination NAT を処理します(上記では DOCKER というチェインに転送しています)
- 転送を受けた DOCKER チェインで自分宛てのパケットのうち宛先ポート番号が8080 の場合は 172.21.34.9:80 に付け替えるという設定が行われているのがわかります
つまり、 localhost:8080 は 172.21.34.9:80 (アドレスは環境により異なります)に転送されるわけです。172.21.34.9が docker0 上のコンテナのIPアドレスであり、その中で80番ポートで待ち受けている nginx が処理するということです。
結構、話が長いのでかなり省略した形になってしまいました。不明点があれば、コメントでご質問ください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/03 07:10 編集
2020/05/03 07:15 編集
2020/05/03 07:22
2020/05/03 07:33
2020/05/03 07:59
2020/05/03 08:00