アプリケーションの隣で待ち受けるローカルプロキシは、プロキシ経由のアクセスを必要とするネットワークを再現しません。アプリケーションが設定済みのプロキシを無視して直接接続し、それでも成功を報告する可能性があります。

アプリケーションのネットワークをプロキシの外向き経路から分離します。コンテナを使った一つの構成では、アプリケーションを内部ネットワークだけに置き、プロキシに二つ目の外向きネットワークを与えます。既存の Compose 定義では、ネットワークの接続は次のようになります。

services:
  app:
    networks: [clients]
  proxy:
    networks: [clients, egress]
networks:
  clients:
    internal: true
  egress: {}

これは既に定義済みのサービス向けのネットワーク断片です。承認済みのフォワードプロキシとアプリケーションの実際のクライアントは別々に設定します。Docker は内部ネットワークを外部から隔離されたものとして文書化しており、この構成で追加の外向きネットワークを持つのはプロキシだけです。

プロキシを使わない否定ケースも含めます。アプリケーションの外部リクエストは失敗するはずです。認証付き HTTP プロキシでは、拒否されたアカウントは認証エラーを返し、受け入れられたアカウントは対応するプロキシの観測とともに宛先へ到達するはずです。

プロキシの許可されるケースと拒否されるケースを別々に確認します。アプリケーションを他の外部ネットワークに置かず、プロキシを迂回するホストネットワークモードを追加しないでください。リクエストの成功が有用な証拠になるのは、テストが意図した経路だけを提供している場合に限られます。

関連記事