ホストネットワーク名前空間の共有

ホストネットワークの必要性を確認し、必要なアドレスとポートだけを公開してください。

説明

network_mode: "host"を使うと、コンテナーは独立したネットワーク空間ではなく、ホストのネットワークをそのまま使います。ホストネットワークに対応する実行環境での動作であり、実際の外部アクセスは待ち受けアドレス、ファイアウォール、認証の設定にも依存します。

この設定は、ポートの競合、公開範囲の拡大、ネットワーク分離の低下につながる可能性があります。特別な要件がなければ、一般的なアプリケーションコンテナーには独立したネットワークを使ってください。

想定される影響

  • コンテナーとホストが同じネットワーク名前空間を共有します。
  • 公開ポートやポート競合の管理が複雑になる可能性があります。
  • ネットワークの分離が弱まり、攻撃対象が増えるおそれがあります。

対処方法

  • network_mode: "host"を削除し、既定のブリッジネットワークか専用ネットワークを使ってください。
  • 外部アクセスが必要な場合は、必要なホストアドレスとポートだけをバインドしてください。Composeの内部通信だけであれば、ポートの公開は不要です。
  • ホストネットワークが必要な例外のワークロードは、別の構成として管理してください。

例

変更前

yaml
services:
  mongo:
    image: mongo:latest
    network_mode: "host"

変更後

yaml
services:
  mongo:
    image: mongo:latest
    ports:
      - "27017:27017"

説明:

  • 変更前: ホストのネットワークをそのまま共有し、コンテナーのネットワーク分離とポートの制御が弱まります。
  • 変更後: 独立したネットワークを維持し、ポートを公開します。27017:27017は既定ですべてのホストインターフェースにバインドされるため、必要な待ち受けアドレスとファイアウォールルールを設定し、MongoDBの認証も別途構成してください。

参考資料