ホストネットワークの利用

コンテナーに対して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 つのサービスコンテナーしか稼動できません。

次のステップ

network, host, standalone