Docker Network(Windows2016)

更新日 2017-04-03 (月) 18:46:28

サーバの物理構成としてネットワークは NICを2枚使用して一枚はDocker用のNIC、もう一枚はDockerサーバ用のNICにした。

Dockerには

  1. NATのネットワーク(デフォルトのネットワーク)
    • 各コンテナーは、内部のプライベート IP プレフィックス (例: 172.16.0.0/12) から IP アドレスを取得する。 コンテナー ホストからコンテナー エンドポイントへのポート転送およびマッピングがサポートされる。
  2. 透過のネットワーク
    • 各コンテナーのエンドポイントは、物理ネットワークに直接接続される。
  3. L2 ブリッジ ネットワーク
    • 各コンテナーのエンドポイントは、コンテナー ホストと同じ IP サブネット内にある。 IP アドレスは、コンテナー ホストと同じプレフィックスから静的に割り当てる必要がある。 ホスト上のすべてのコンテナーのエンドポイントは、レイヤー 2 のアドレス変換のために同じ MAC アドレスとなる。

がある

手順

  1. Dockerで自由にNetworkを構成するには起動しているDockerを停止する。
    • 「Stop-Service docker」
  2. Dockerサーバの「C:\ProgramData\docker\config」にdaemon.jsonというファイルを以下のように変更または作成する
    {
        "bridge" : "none"
    }
  3. デフォルトで動いているNAT構成(172.30.176.0/20のネットワーク)のDockerNetWorkの削除をする
    • 「Get-ContainerNetwork | Remove-ContainerNetwork」
  4. Dockerを起動する
    • 「Get-ContainerNetwork」

以下が実際のコマンドの様子

Natのネットワーク構成

従来のデフォルトネットワーク172.30.176.0/20を変更する

PS C:\Windows\system32> docker network create -d nat --subnet=192.168.101.0/24 --gateway=192.168.101.1 IsmNatNetwork

透過のネットワーク構成

物理ネットワークに直接接続する

docker network createで使用するパラメータcom.docker.network.windowsshim.interfaceの値は次のコマンドのNameを指定する

PS C:\Windows\system32> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
イーサネット 2            Intel(R) PRO/1000 PT Dual Port Ser...#2       7 Disconnected 00-15-17-97-2A-0F          0 bps
イーサネット              Intel(R) PRO/1000 PT Dual Port Serve...      15 Up           00-15-17-97-2A-0E         1 Gbps
Npcap Loopback Adapter    Npcap Loopback Adapter                       19 Up           02-00-4C-4F-4F-50       1.2 Gbps
イーサネット 3            Realtek PCIe GBE Family Controller           18 Up           00-26-18-7D-F7-EE         1 Gbps
PS C:\Windows\system32> docker network create -d transparent -o com.docker.network.windowsshim.interface="イーサネット" --subnet=192.168.10.0/24 --gateway=192.168.10.245 IsmNet1
b1280e540af55856bf1a9470ffcea16da511e0c1329be5efdeb8778f738be879

L2 ブリッジ ネットワーク構成

PS C:\Windows\system32> docker network create -d l2bridge -o com.docker.network.windowsshim.interface="イーサネット" --subnet=192.168.10.0/24 --gateway=192.168.10.245 IsmNeB
526aff3d1f36de7619a9a1adc1a5c87ed9b2d3250c60c73fd1d465bf40986b20
PS C:\Windows\system32> docker run -it --network=IsmNetB --ip 192.168.10.111 --isolation hyperv --name ismsv ism/nanoserver:last cmd

注意)--isolation=hypervでHyper-Vコンテナを使用するとき「L2 ブリッジ」では--ip 192.168.10.111のようにIPを固定できるが、「透過のネットワーク」では無視され外部DHCPよりIPが割り振られる。(仕様?)

問題:DockerコンテナからDockerサーバにPingが通らない。DockerサーバからDockerコンテナにはPingが通る。
外部PCからDockerサーバにPingが通らない。Dockerサーバから外部PCにはPingが通る。
外部PCからDockerサーバにはリモートデスクトップ接続ができる。
(なんで???)
Dockerサーバ:Dockerが動作しているWindows2016

参考


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS