ウェブサイト検索

Dockerコンテナからホストのポートにアクセスする方法


外部世界とネットワークを構築する場合、Dockerはリクエストがホストマシンから来ているかのように動作します。しかし、ホスト上で実行されているプロセスにアクセスする場合、ファイアウォールに追加の設定が必要になることがあります。

解決策:172.18.0.0/16のためにファイアウォールルールを追加すること

ホストマシン上でHTTPサービスのようなプロセスにアクセスしようとした場合、ブロックされることがあります。これは、Dockerコンテナがホスト上で実行されていても、論理的に分離された状態を保つために特別なネットワーキングを使用しており、そのために異なるIPアドレスを持っているからです。

実行中にこれを見ることができます

ifconfig

標準のネットワークインターフェースが表示されますが、また...

docker0

インターフェース。デフォルトでは、DockerはコンテナのIPアドレスを割り当てるために172.18.0.0/16ブロックを使用します。

解決策は非常に簡単です---ファイアウォールでこのポート範囲を開いてください。Dockerが使用するIP範囲からのリクエストがブロックされている可能性があります。それはプライベートIPアドレス範囲なので、オープンにしていてもリスクは最小限です。UFWの場合、以下のようになります:

sudo ufw allow from 172.18.0.0/24

オプションで開くポートを指定できます:

sudo ufw allow from 172.18.0.0/24 to any port 9200

iptablesの場合は、次のようになります:

iptables --append INPUT --protocol tcp --src 172.18.0.0/24 --jump DROP

AWSのようなマネージドホスティングサービスでは、特に何も変更する必要はありません。セキュリティグループはインスタンスの前にあるネットワークファイアウォールであり、内部トラフィックには影響しないはずです。

関連記事: