ホスト・ネットワークの使用¶
コンテナに対して 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 ではサポートしていません。
また、swarm サービスでも docker service create
コマンドで --network host
を渡すことで、 host
ネットワークが利用可能です。この場合、管理トラフィック(swarm とサービスの管理に関連するトラフィック)はオーバレイ・ネットワーク上を渡りますが、個々のサービス・コンテナがデータの送信には、各 Docker デーモンのホスト上のネットワークとポートを使用します。swarm サービス上での作成では、追加の制限があります。たとえば、サービス・コンテナがポート 80 をバインドしても、対象となる swarm ノード上で実行しているコンテナのサービスのみが対象です。
次のステップ¶
- ホスト・ネットワーク機能のチュートリアル に進む
- コンテナ視点からのネットワーク機能 について学ぶ
- ブリッジ・ネットワーク について学ぶ
- オーバレイ・ネットワーク について学ぶ
- Macvlan ネットワーク について学ぶ
参考
- Use host networking
- https://docs.docker.com/network/host/