【要約】コンテナのポートが競合する不思議を解明する【docker】 [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
複数プロジェクトの並行開発時に発生するポート競合エラー。主な課題は以下の通り。
- ・「コンテナごとにIPがあるなら、ポートが重複しても問題ないはず」という誤解。
- ・コンテナ内部の隔離(Network Namespace)と、ホストOSの共有リソース(ポート)の混同。
- ・ホストOSのポートを複数のコンテナが同時に占有しようとする衝突。
// Approach
競合の性質に応じ、以下の4つのアプローチを提示している。
1.コンテナの停止:
docker stop により競合中のコンテナを排除。2.ホスト側ポートの変更:
ports 設定の左側(ホスト側)を重複しない番号へ書き換え。3.仮想IPの追加:
ifconfig や ip addr でホストに別IP(例: 127.0.0.2)を割り当て、127.0.0.2:8080:80 のように指定。4.リバースプロキシの導入: Nginx等のL7プロキシを介し、HTTP Hostヘッダーに基づき内部ネットワークへ転送。
// Result
L4レベルの回避策により、即座に競合を解消可能。L7レベル(リバースプロキシ)の導入により、ホストのポート消費を最小限に抑えられる。また、ドメイン名による直感的なアクセス環境を実現できる。
Senior Engineer Insight
>
ポート競合の本質は、ホストOSのリソース競合である。単なるポート番号の変更は、手順書との乖離を招き、開発体験を損なう。実戦ではリバースプロキシの導入を推奨する。L7での制御は、ホストのポート消費を抑え、ドメインベースの運用を可能にする。これは、開発環境の再現性とスケーラビリティを両立させる最適解である。プロジェクトが増えるほど、この構成の価値は高まる。