ホストネットワークの利用
コンテナーに対してhost
ネットワークモードを利用すると、コンテナーのネットワーク構成は Docker ホストからは分離されません。
(そのコンテナーはホストのネットワーク名前空間を共有します。)
そしてそのコンテナーは、独自に割り当てられる IP アドレスを用いません。
たとえばポート 80 を割り当てているコンテナーを実行するにあたり、host
ネットワークとしている場合、コンテナー上に動作するアプリケーションは、ホストの IP アドレスにおけるポート 80 が利用可能となります。
メモ
host
モードのネットワークを利用する場合、コンテナーは独自の IP アドレスを持たないため、ポートマッピング は機能しません。 したがって-p
、--publish
、-P
、--publish-all
の各オプションは無視され、警告メッセージが表示されます。WARNING: Published ports are discarded when using host network mode
ネットワークをホストモードにすると、性能を最適化できます。 またコンテナーが広範囲にわたるポートを取り扱う必要がある場合に役立ちます。 これは、ネットワークアドレス変換(NAT)が不要であり、各ポートに「ユーザーランドプロキシー」が生成されないからです。
ホストネットワークにおけるドライバーは Linux ホスト上においてのみ動作します。 Docker Desktop for Mac、Docker Desktop for Windows、Docker EE for Windows Server ではサポートされていません。
host
ネットワークは Swarm サービスに対しても利用できます。
利用するにはdocker service create
コマンドに--network host
を指定します。
この場合、制御情報のトラフィック(Swarm やサービスの管理に関連するトラフィック)は、変わらずオーバーレイネットワークを介して送信されます。
一方、個々の Swarm サービスコンテナーは、Docker デーモンホスト上のネットワークとポートを利用して、データ送信を行います。
このときには、新たな制約が発生します。
たとえば 1 つのサービスコンテナーがポート 80 に割り当てられると、指定された Swarm ノード上では 1 つのサービスコンテナーしか稼動できません。
次のステップ
- ホストネットワークのチュートリアル をひととおり読んでください。
- コンテナーから見たネットワーク について。
- ブリッジネットワーク について。
- オーバーレイネットワーク について。
- Macvlan ネットワーク について。