次の方法で共有


Windows の高度なネットワーク オプション

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016

Windows 固有の機能を利用するために、いくつかのネットワーク ドライバー オプションがサポートされています。

Docker ネットワークを使用した埋め込みチーミングの切り替え

すべてのネットワーク ドライバーに適用されます

オプションで複数の ネットワーク アダプター (コンマで区切って) を指定することで、Docker で使用するコンテナー ホスト ネットワークを作成するときに、スイッチ埋め込みチーミング-o com.docker.network.windowsshim.interface 利用できます。

C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2", "Ethernet 3" TeamedNet

ネットワークの VLAN ID を設定する

透過的および l2bridge ネットワーク ドライバーに適用されます

ネットワークの VLAN ID を設定するには、コマンドにオプション -o com.docker.network.windowsshim.vlanid=<VLAN ID>docker network create 使用します。 たとえば、次のコマンドを使用して、VLAN ID が 11 の透過的なネットワークを作成できます。

C:\> docker network create -d transparent -o com.docker.network.windowsshim.vlanid=11 MyTransparentNetwork

ネットワークの VLAN ID を設定するときは、そのネットワークに接続されるすべてのコンテナー エンドポイントの VLAN 分離を設定します。

ホスト ネットワーク アダプター (物理) がトランク モードになっていることを確認して、タグ付けされたすべてのトラフィックが vSwitch によって適切な VLAN 上のアクセス モードの vNIC (コンテナー エンドポイント) ポートで処理されるようにします。

ネットワークの送信NAT ポリシーを指定する

l2bridge ネットワークに適用されます

通常、コンテナー ネットワークをl2bridgedocker network create作成するときに、コンテナー エンドポイントに HNS OutboundNAT ポリシーが適用されていないため、コンテナーが外部に到達できなくなります。 ネットワークを作成する場合は、OutboundNAT HNS ポリシーを適用するオプションを使用 -o com.docker.network.windowsshim.enable_outboundnat=<true|false> して、コンテナーに外部へのアクセス権を付与できます。

C:\> docker network create -d l2bridge -o com.docker.network.windowsshim.enable_outboundnat=true MyL2BridgeNetwork

NAT を発生させたくない場所に一連の宛先 (コンテナー間の接続が必要な場合など) がある場合は、ExceptionList も指定する必要があります。

C:\> docker network create -d l2bridge -o com.docker.network.windowsshim.enable_outboundnat=true -o com.docker.network.windowsshim.outboundnat_exceptions=10.244.10.0/24

HNS サービスへのネットワークの名前を指定する

すべてのネットワーク ドライバーに適用されます

通常、コンテナー ネットワーク docker network createを作成するときに指定するネットワーク名は Docker サービスによって使用されますが、HNS サービスでは使用されません。 ネットワークを作成する場合は、コマンドにオプションを使用して HNS -o com.docker.network.windowsshim.networkname=<network name> サービスによって指定される名前を docker network create 指定できます。 たとえば、次のコマンドを使用して、HNS サービスに指定された名前の透過的なネットワークを作成できます。

C:\> docker network create -d transparent -o com.docker.network.windowsshim.networkname=MyTransparentNetwork MyTransparentNetwork

ネットワークを特定のネットワーク インターフェイスにバインドする

'nat' を除くすべてのネットワーク ドライバーに適用されます

(Hyper-V 仮想スイッチを介して接続された) ネットワークを特定のネットワーク インターフェイスにバインドするには、コマンドにオプション -o com.docker.network.windowsshim.interface=<Interface>docker network create 使用します。 たとえば、次のコマンドを使用して、"イーサネット 2" ネットワーク インターフェイスに接続されている透過的なネットワークを作成できます。

C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" TransparentNet2

注: com.docker.network.windowsshim.interface値はネットワーク アダプターの名前です。これは次のコマンドで確認できます。

PS C:\> Get-NetAdapter

ネットワークの DNS サフィックスまたは DNS サーバーを指定する

すべてのネットワーク ドライバーに適用されます

ネットワークの DNS サフィックスを指定するオプション -o com.docker.network.windowsshim.dnssuffix=<DNS SUFFIX> と、ネットワークの DNS サーバーを指定するオプション -o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S> を使用します。 たとえば、次のコマンドを使用して、ネットワークの DNS サフィックスを "example.com" に設定し、ネットワークの DNS サーバーを 4.4.4.4 および 8.8.8 に設定できます。

C:\> docker network create -d transparent -o com.docker.network.windowsshim.dnssuffix=abc.com -o com.docker.network.windowsshim.dnsservers=4.4.4.4,8.8.8.8 MyTransparentNetwork

VFP

詳細については、この記事を参照してください。

ヒント & インサイト

コミュニティから聞いた Windows コンテナー ネットワークに関する一般的な質問に基づいて、便利なヒントと分析情報の一覧を次に示します。

HNS では、コンテナー ホスト マシンで IPv6 が有効になっている必要があります

KB (キロバイト)4015217 HNS の一部として、Windows コンテナー ホストで IPv6 が有効になっている必要があります。 次のようなエラーが発生した場合は、ホスト コンピューターで IPv6 が無効になっている可能性があります。

docker: Error response from daemon: container e15d99c06e312302f4d23747f2dfda4b11b92d488e8c5b53ab5e4331fd80636d encountered an error during CreateContainer: failure in a Windows system call: Element not found.

この問題を自動的に検出/防止するために、プラットフォームの変更に取り組んでいます。 現在、次の回避策を使用して、ホスト コンピューターで IPv6 が有効になっていることを確認できます。

C:\> reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters  /v DisabledComponents  /f

Windows 上の Linux コンテナー

新規: Moby Linux VM なしで Linux コンテナーと Windows コンテナーをサイド バイ サイドで実行できるように取り組んでいます。 詳細については、Windows 上の Linux コンテナー (LCOW) に関するこのブログ記事を参照してください。 使用を開始する方法を次に示します。

注: LCOW は Moby Linux VM を非推奨としており、既定の HNS "nat" 内部 vSwitch が使用されます。

Moby Linux VM では、Docker for Windows (Docker CE製品) で DockerNAT スイッチを使用します

Windows 10 上の Docker for Windows (Docker CE エンジン用 Windows ドライバー) では、"DockerNAT" という名前の内部 vSwitch を使用して、Moby Linux VM をコンテナー ホストに接続します。 Windows で Moby Linux VM を使用する開発者は、ホストが HNS サービスによって作成された "nat" vSwitch (Windows コンテナーに使用される既定のスイッチ) ではなく DockerNAT vSwitch を使用していることに注意する必要があります。

仮想コンテナー ホストで IP 割り当てに DHCP を使用するには、MACAddressSpoofing を有効にする

コンテナー ホストが仮想化されていて、IP 割り当てに DHCP を使用する場合は、仮想マシンのネットワーク アダプターで MACAddressSpoofing を有効にする必要があります。 それ以外の場合、Hyper-V ホストは、複数の MAC アドレスを持つ VM 内のコンテナーからのネットワーク トラフィックをブロックします。 MACAddressSpoofing を有効にするには、次の PowerShell コマンドを使用します。

PS C:\> Get-VMNetworkAdapter -VMName ContainerHostVM | Set-VMNetworkAdapter -MacAddressSpoofing On

ハイパーバイザーとして VMware を実行している場合は、これを機能させるために無差別モードを有効にする必要があります。 詳細は こちらをご覧ください。

1 つのコンテナー ホスト上に複数の透過的なネットワークを作成する

複数の透過的なネットワークを作成する場合は、外部 Hyper-V 仮想スイッチをバインドする (仮想) ネットワーク アダプターを指定する必要があります。 ネットワークのインターフェイスを指定するには、次の構文を使用します。

# General syntax:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface=<INTERFACE NAME> <NETWORK NAME>

# Example:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" myTransparent2

静的 IP 割り当てを使用する場合は、必ず --subnet と --gateway を指定してください

静的 IP 割り当てを使用する場合は、まず、ネットワークの作成時に --subnet パラメーターと --gateway パラメーターが指定されていることを確認する必要があります。 サブネットとゲートウェイの IP アドレスは、コンテナー ホスト (物理ネットワーク) のネットワーク設定と同じである必要があります。 たとえば、透過的なネットワークを作成し、静的 IP 割り当てを使用してそのネットワーク上でエンドポイントを実行する方法を次に示します。

# Example: Create a transparent network using static IP assignment
# A network create command for a transparent container network corresponding to the physical network with IP prefix 10.123.174.0/23
C:\> docker network create -d transparent --subnet=10.123.174.0/23 --gateway=10.123.174.1 MyTransparentNet
# Run a container attached to MyTransparentNet
C:\> docker run -it --network=MyTransparentNet --ip=10.123.174.105 windowsservercore cmd

L2Bridge ネットワークでは DHCP IP 割り当てがサポートされていません

l2bridge ドライバーを使用して作成されたコンテナー ネットワークでは、静的 IP 割り当てのみがサポートされます。 前述のように、--subnet パラメーターと --gateway パラメーターを使用して、静的 IP 割り当て用に構成されたネットワークを作成することを忘れないでください。

外部 vSwitch を利用するネットワークには、それぞれ独自のネットワーク アダプターが必要です

接続に外部 vSwitch を使用する複数のネットワーク (Transparent、L2 Bridge、L2 Transparent など) が同じコンテナー ホスト上に作成される場合は、それぞれに独自のネットワーク アダプターが必要です。

停止したコンテナーと実行中のコンテナーでの IP 割り当て

静的 IP 割り当てはコンテナーのネットワーク アダプターで直接実行され、コンテナーが STOPPED 状態の場合にのみ実行する必要があります。 コンテナーの実行中、コンテナー ネットワーク アダプターまたはネットワーク スタックへの変更の "ホット追加" はサポートされていません (Windows Server 2016)。

既存の vSwitch (Docker に表示されない) により、透過的なネットワークの作成がブロックされる

透過的なネットワークの作成でエラーが発生した場合は、Docker によって自動的に検出されなかった外部 vSwitch がシステムに存在し、そのため透過的なネットワークがコンテナー ホストの外部ネットワーク アダプターにバインドされない可能性があります。

透過的なネットワークを作成する場合、Docker はネットワークの外部 vSwitch を作成し、スイッチを (外部) ネットワーク アダプターにバインドしようとします。アダプターは VM ネットワーク アダプターまたは物理ネットワーク アダプターである可能性があります。 コンテナー ホスト上に vSwitch が既に作成されていて、 Docker に表示されている場合、 Windows Docker エンジンは新しいスイッチを作成する代わりにそのスイッチを使用します。 ただし、帯域外で作成された vSwitch (つまり、HYper-V Manager または PowerShell を使用してコンテナー ホスト上に作成された) がまだ Docker に表示されていない場合、Windows Docker エンジンは新しい vSwitch を作成し、新しいスイッチをコンテナー ホスト外部ネットワーク アダプターに接続できなくなります (ネットワーク アダプターは帯域外で作成されたスイッチに既に接続されているため)。

たとえば、Docker サービスの実行中に最初にホストに新しい vSwitch を作成してから、透過的なネットワークを作成しようとすると、この問題が発生します。 この場合、Docker は作成したスイッチを認識せず、透過的なネットワーク用の新しい vSwitch を作成します。

この問題を解決するには、次の 3 つの方法があります。

  • もちろん、帯域外で作成された vSwitch を削除できます。これにより、Docker は新しい vSwitch を作成し、問題なくホスト ネットワーク アダプターに接続できます。 この方法を選択する前に、帯域外 vSwitch が他のサービス (Hyper-V など) で使用されていないことを確認します。
  • または、帯域外で作成された外部 vSwitch を使用する場合は、Docker サービスと HNS サービスを再起動して 、スイッチを Docker に表示します。
PS C:\> restart-service hns
PS C:\> restart-service docker
  • もう 1 つのオプションは、'-o com.docker.network.windowsshim.interface' オプションを使用して、透過的なネットワークの外部 vSwitch を、コンテナー ホストでまだ使用されていない特定のネットワーク アダプター (つまり、帯域外で作成された vSwitch によって使用されているネットワーク アダプター以外) にバインドすることです。 「-o」オプションについては、このドキュメントの 「1 つのコンテナー ホスト での複数の透過的なネットワークの作成」セクションで詳しく説明します。

Windows Server 2016 の回避策

引き続き新機能を追加し、開発を推進していますが、これらの機能の一部は古いプラットフォームに移植されません。 代わりに、Windows 10 と Windows Server の最新の更新プログラムに対して "トレーニングに参加" することをお勧めします。 以下のセクションでは、Windows Server 2016 以前のバージョンの Windows 10 (つまり、1704 Creators Update より前) に適用される回避策と注意事項を示します。

WS2016 コンテナー ホスト上の複数の NAT ネットワーク

新しい NAT ネットワークのパーティションは、より大きな内部 NAT ネットワーク プレフィックスの下に作成する必要があります。 このプレフィックスは、PowerShell から次のコマンドを実行し、"InternalIPInterfaceAddressPrefix" フィールドを参照することで確認できます。

PS C:\> Get-NetNAT

たとえば、ホストの NAT ネットワーク内部プレフィックスは、172.16.0.0/16 であるとします。 この場合、Docker は、172.16.0.0/16 プレフィックスのサブセットである限り、追加の NAT ネットワーク を作成するために使用できます。 たとえば、IP プレフィックス 172.16.1.0/24 (ゲートウェイ、172.16.1.1) と 172.16.2.0/24 (ゲートウェイ、172.16.2.1) を持つ 2 つの NAT ネットワークを作成できます。

C:\> docker network create -d nat --subnet=172.16.1.0/24 --gateway=172.16.1.1 CustomNat1
C:\> docker network create -d nat --subnet=172.16.2.0/24 --gateway=172.16.1.1 CustomNat2

新しく作成されたネットワークは、次を使用して一覧表示できます。

C:\> docker network ls

Docker Compose

Docker Compose を使用して、それらのネットワークを使用するコンテナー/サービスと共にコンテナー ネットワークを定義および構成できます。 Compose 'networks' キーは、コンテナーが接続されるネットワークを定義する際に最上位のキーとして使用されます。 たとえば、次の構文では、Docker によって作成された既存の NAT ネットワークが、特定の Compose ファイルで定義されているすべてのコンテナー/サービスの "既定" ネットワークとして定義されています。

networks:
 default:
  external:
   name: "nat"

同様に、次の構文を使用してカスタム NAT ネットワークを定義できます。

注: 次の例で定義されている 'カスタム NAT ネットワーク' は、コンテナー ホストの既存の NAT 内部プレフィックスのパーティションとして定義されています。 コンテキストの詳細については、上記の「複数の NAT ネットワーク」セクションを参照してください。

networks:
  default:
    driver: nat
    ipam:
      driver: default
      config:
      - subnet: 172.16.3.0/24

Docker Compose を使用したコンテナー ネットワークの定義/構成の詳細については、「ファイルの作成」リファレンスを 参照してください